接着上一篇文章我们继续,如果只看上一篇大家发现其实还没有做好界面,就是说还是错误的,因为上一篇文章代码里面的一些参数我还没贴上,将在这一节给贴上

上一章说白了我们只是把按钮和“显示屏”定义好然后装到LinearLayout上去,控件的一些参数还没给,现在马上贴参数:

1,按钮圆角





RoundRectShape rrs = new RoundRectShape(new float[] {500,500,500,500,500,500,500,500},null,null);
        //数字键-----深灰色>>>>>按键点击时是浅灰色,可以利用功能键得到
        private ShapeDrawable num_sd(){
            ShapeDrawable num_sd = new ShapeDrawable(rrs);
            num_sd.getPaint().setColor(Color.rgb(40,40,40));
            num_sd.getPaint().setStyle(Paint.Style.FILL);
            return num_sd;
        }

圆角按钮利用一个叫RoundRectShape这么一个类来设置四个角的弧度,他带三个参数,第一个是弧度的半径数组,第二个是内部矩形与外部矩形的距离,第三个是内部矩形的弧度半径数组,后面两个参数直接为null就行了,其他作用自行参考。然后还有一个类叫shapedrawable,这个类用来设置填充颜色及设置样式,这个类的对象直接被用到按钮的setBackground()这个方法去的。所以每个按钮都需要

.setBackground(new MyButtonStyle().num_sd());这样设置才能生效。

上面我只贴了一种颜色的样式,其他都一样直接复制更改填充颜色就ok了,你点击变色也是在这定义颜色的,所以不只三种颜色,而是六种!!!!

z


2,按钮点击变色,这当然是用到点击事件才变色的,不过它点击时并不是一直变色,当你释放的时候就恢复了,所以不能用饿我们平时用的点击事件那个类(OnClickListener),而是用一个叫OnTouchListener这个监听器,这个监听器监听两个状态,就是按下和释放,下面直接贴代码,我相信都能看懂

//0-9数字按键按下变色
        private void numberClick(MotionEvent event,String number) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_UP://松开事件发生后执行代码的区域
                    chengeNumColorTrue(number);
                    break;
                case MotionEvent.ACTION_DOWN://按住事件发生后执行代码的区域
                    chengeNumColorFalse(number);
                    new Info().input(number);
                    break;
                default:
                    break;
            }
        }

这就是这个监听器的两种状态事件,我这松开按钮时只是恢复颜色,并没其他可做的事,按下时一个是变色,一个是判断该在textview上显示什么,按1就输入1嘛,所以直接带参数进来,不然你就非得在每一个switch上做这么一个状态事件那代码就惨不忍睹了,这个是0-9和“.”的事件,其他都一样啦

3,用水果手机的人都知道加减乘除这四个键按下去他是定住的,再按的时候或者按下其他任意一个键它才恢复。在这里我用的是我们平时用的点击事件OnClickListener了,值得注意的是你要怎么去做这个事?我的思想是这样的,软件开发重要的还是思想,思维,逻辑等。。我的思想是定义一个int型变量,默认值为0,当加号按下其值为1,减号2,乘号3,除号4.其他键的时候恢复0这样一个标志。代码如下

//加减乘除点击时变色
        private void symbol_click_true(int a , String str) {
            new Info().symbol_click_false();
            if(symbol==a){
                getButton(str).setBackground(new MyButtonStyle().symbol_sd());
                getButton(str).setText(str);
                getButton(str).setTextColor(Color.rgb(225,225,225));
                symbol=0;
            }else {
                getButton(str).setBackground(new MyButtonStyle().symbol_click_sd());
                getButton(str).setTextColor(Color.rgb(205, 102, 0));
                symbol = a;
            }

        }

按下是传一个整数,整个整数就是刚才说的标志,和一个字符串,字符串就是加减乘除这四个字符。

然后当按下这四个键中的一个时你不按其他键而是按下它本身也会恢复,代码如下

//加减乘除再按下恢复代码
        private void chengeColorFalse(String number){
            getButton(number).setBackground(new MyButtonStyle().symbol_click_sd());
            getButton(number).setText(number);
            getButton(number).setTextColor(Color.rgb(205, 102, 0));
        }
        //如果加减乘除按键已经变色,则恢复
        private void symbol_click_false() {
            switch (symbol){
                case 1:
                    chengeColorTrue("+");
                    break;
                case 2:
                    chengeColorTrue("-");
                    break;
                case 3:
                    chengeColorTrue("×");
                    break;
                case 4:
                    chengeColorTrue("÷");
                    break;
                default:break;
            }

        }

再添加带事件就OK了

//加减乘除按钮点击事件
    class ButtonOnClick implements View.OnClickListener
    {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case 7://+
                    symbols.add("+");
                    new Info().symbol_click_true(1,"+");
                    new Info().result();
                    break;
                case 11://-
                    symbols.add("-");
                    new Info().symbol_click_true(2,"-");
                    new Info().result();
                    break;
                case 15://x
                    symbols.add("×");
                    new Info().symbol_click_true(3,"×");
                    new Info().result();
                    break;
                case 3://÷
                    symbols.add("÷");
                    new Info().symbol_click_true(4,"÷");
                    new Info().result();
                    break;
            }
        }
    }

最最最最后要记得这个:最最最最后要记得这个:最最最最后要记得这个:重要事情说三遍!!!!!!!!!!!!

public class MainActivity extends Activity {
    TextView textview;
    ArrayList<Button> buttons = new ArrayList<>();
    ArrayList<String> symbols = new ArrayList<>();
    double num=0;
    int symbol=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //设置全屏无标题兰
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(myLayout());

        //设置监听0-9
        for(int i=0;i<10;i++) {
            getButton(i+"").setOnTouchListener(new MyOnTouchListener());
        }
        //其他键
        String [] str1 = {"AC","±","%",".","="};
        for(int i=0;i<str1.length;i++){
            getButton(str1[i]).setOnTouchListener(new MyOnTouchListener());
        }
        //其他键
        String [] str2 = {"+","-","×","÷"};
        for(int i=0;i<str2.length;i++){
            getButton(str2[i]).setOnClickListener(new ButtonOnClick());
        }

        Log.d(TAG,"按键宽度:"+getButtonWidth());

        getAndroiodScreenProperty();

    }

把界面的事件放到Android的主函数执行。。。。。。。。。。。。。。。。。。

界面到此圆满成功!如果还有什么不显示货不正常说明你只是复制代码没看我写的字,还有的相同的套料没贴出来,但是思想绝对到位了,主要是思想!!!谢谢!功能下一章吧,其实写这个很辛苦的,理解万岁!!