工作了这么长时间还从来没写过博客,最近闲来无事,忽然想写点东西与大家交流学习,如果哪里有不正确的地方欢迎大家指正。好了不说废话先上效果图:

当在一图输入数字后会在二图显示对应数字的控件,当点击上下左右时,红色会上下左右移动,图二是在点击右-上-右-右-右时的效果当在第一行点上时会跑到最后一行对应的位置,当在最后一行点下时会跑到第一行对应的位置,当在按钮0点左时会跑到最后一个,当在最后一个点右时会跑到按钮0。如何实现呢?第一个界面就不说了相信大家对大家一点难度也没有,从第二张图片说起。第一步:获取从图一输入的数字;

String str=getIntent().getStringExtra("num");
num=Integer.valueOf(str);

第二步:动态创建控件,创建的控件属为输入的数字,在布局里静态创建四个按钮并设置监听;

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/rl_bton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rl_up"
        style="@style/mw_layout"
        android:layout_below="@+id/rl_bton"
        android:layout_marginTop="30dp"
        android:gravity="center">

        <TextView
            android:id="@+id/tv_up"
            style="@style/ww_layout"
            android:text="上"/>

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rl_rightandleft"
        style="@style/mw_layout"
        android:layout_below="@+id/rl_up"
        android:gravity="center">

        <TextView
            android:id="@+id/tv_left"
            style="@style/ww_layout"
            android:text="左"/>

        <TextView
            android:id="@+id/tv_right"
            style="@style/ww_layout"
            android:layout_marginLeft="40dp"
            android:layout_toRightOf="@+id/tv_left"
            android:text="右"/>
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rl_down"
        style="@style/mw_layout"
        android:layout_below="@+id/rl_rightandleft"
        android:gravity="center">

        <TextView
            android:id="@+id/tv_down"
            style="@style/ww_layout"
            android:gravity="center"
            android:text="下"/>
    </RelativeLayout>
</RelativeLayout>

Activity:

private void createControl() {//获取屏幕尺寸
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int width = dm.widthPixels;

    //动态创建button
    RelativeLayout layout = (RelativeLayout) findViewById(R.id.rl_bton);
    bt = new Button[num];
    int j = -1;
    for (int i = 0; i < bt.length; i++) {bt[i] = new Button(this);
        bt[i].setText("按钮" + i);
        //所有的button默认背景为蓝色
        bt[i].setBackgroundColor(Color.parseColor("#6699ff"));
        //设置按钮的宽度和高度
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((width - 50) / 4, 40);
        if (i % 4 == 0) {j++;
        }//控件的左间距和上间距
        params.leftMargin = 10 + ((width - 50) / 4 + 10) * (i % 4);
        params.topMargin = 20 + 55 * j;
        layout.addView(bt[i], params);
    }//给button0默认设置为红色
    bt[0].setBackgroundColor(Color.parseColor("#f34649"));

}

最后一步就是实现上下左右移动的逻辑了。向上移动减四,向下移动位置加四,向左移动位置减一,向右移动位置加一

@Override
public void onClick(View v) {switch (v.getId()) {case R.id.tv_up://把背景设置为默认的背景色
            bt[i].setBackgroundColor(Color.parseColor("#6699ff"));
                //向上移动位置减四
                if (i - 4 < 0) {if ((Math.floor(num / 4) * 4 + i) < bt.length) {i = (int) Math.floor(num / 4) * 4 + i;
                        Log.d("111111111", String.valueOf(i));
                        bt[i].setBackgroundColor(Color.parseColor("#f34649"));
                    } else {i = bt.length + i - 4 - bt.length % 4;
                        bt[i].setBackgroundColor(Color.parseColor("#f34649"));
                    }} else {i -= 4;
                    bt[i].setBackgroundColor(Color.parseColor("#f34649"));
                }break;
        case R.id.tv_left:bt[i].setBackgroundColor(Color.parseColor("#6699ff"));
            //向左移动位置减一
            if (i - 1 < 0) {i = bt.length + i - 1;
                bt[i].setBackgroundColor(Color.parseColor("#f34649"));
            } else {i -= 1;
                bt[i].setBackgroundColor(Color.parseColor("#f34649"));
            }break;
        case R.id.tv_right:bt[i].setBackgroundColor(Color.parseColor("#6699ff"));
            //向右移动位置加一
            if (i + 1 >= bt.length) {i = i + 1 - bt.length;
                bt[i].setBackgroundColor(Color.parseColor("#f34649"));
            } else {i += 1;
                bt[i].setBackgroundColor(Color.parseColor("#f34649"));
            }break;
        case R.id.tv_down:bt[i].setBackgroundColor(Color.parseColor("#6699ff"));
            //向下移动位置加四
            if (i + 4 >= bt.length) {i = i - (int) Math.floor(i / 4) * 4;
                bt[i].setBackgroundColor(Color.parseColor("#f34649"));
            } else {i += 4;
                bt[i].setBackgroundColor(Color.parseColor("#f34649"));
            }break;

    }
}

以上就是本贴的内容,希望能帮助到需要的朋友,如有错误之处欢迎指正!

点击上下左右按钮让背景上下左右移动相关推荐

  1. 按钮背景过渡css3,使用CSS3点击按钮实现背景渐变动画的效果

    这篇文章给大家介绍的是,利用CSS3实现当点击按钮的时候,按钮的背景是渐变动画的效果,实现后的效果非常好,开发的时候利用这种效果的按钮会给用户一种非常酷炫的感受,感兴趣的朋友们下面来一起看看吧. 效果 ...

  2. andoid点击按钮(ImageButton)时改变按钮的背景图片 SelectorDemo

    andoid点击按钮(ImageButton)时改变按钮的背景图片 SelectorDemo 博客分类: android android selector 改变按钮背景图片 主要是用到selector ...

  3. html编辑点击取消复原,vue点击编辑按钮,内容变成input可以修改,也可以删除

    一.效果 图1 图2,点击报错之后,又变成图1的效果 二.使用到了element UI中的以下组件: 三.使用的关键点是vue中的v-if指令 四.关键代码如下 HTML部分 添加街道 编辑 保存 @ ...

  4. EditText控件的基本使用(点击Button按钮,Toast提示EditText中的内容)

    EditText是程序用于和用户进行交互的另一个重要控件,它允许用户在空间里输入和编辑内容,并可以在程序中对这些内容进行处理.EditText的应用场景非常普遍,在进行发短信.发微博.聊QQ等操作时, ...

  5. 安卓按钮设置背景颜色不管用_MIUI10新功能:时钟背景黑白自选、公交卡自定义时段唤起...

    经历清明假与米粉节后,MIUI10恢复开挂模式,开发版每周给大家推送新功能.本期主要跟大家分享两个要点,其一是时钟背景颜色支持用户选择黑色或者白色,其二是NFC刷卡支持设置优先唤醒时间,降低手工切换操 ...

  6. android中在java代码中设置Button按钮的背景颜色

    android中在java代码中设置Button按钮的背景颜色 1.设置背景图片,图片来源于drawable: flightInfoPanel.setBackgroundDrawable(getRes ...

  7. 微信小程序按钮添加背景

    心急的小伙伴可直接看最后的总结. 这个功能真的是不吐不快!!!,因为是从Android 开发转小程序开发,在Android中给按钮添加背景图片是一件非常简单的事情:如下所示: <Buttonan ...

  8. java表格点击添加按钮一行_JavaScript_JQuery实现动态表格点击按钮表格增加一行,功能实现:点击添加按钮,表 - phpStudy...

    JQuery实现动态表格点击按钮表格增加一行 功能实现:点击添加按钮,表格增加一行并给其name属性赋予的值,方便获取 点击删除,自动删除这一行 JQuery中定义一个count变量 var coun ...

  9. Android中遇到button按钮设置背景图片无法显示的解决方案

    给button设置了background的属性却显示不出来 1.在图片导入时选错位置,应该选择第一个位置,如果选了第二个图片后面会有(v24)[如下图]就有可能加载不出来.  新版引入drawable ...

  10. MFC实战篇——图片旋转、控件PictureControl 清除显示、伪彩、直方图显示、为按钮添加背景图标、设置程序图标

    文章目录 一.图片旋转 二.MFC 控件PictureControl 清除显示 三.伪彩 四.直方图 五.为按钮添加背景图标 六.设置图标 七.改变组框外观 一.图片旋转 建立图片控件 改变图片控件I ...

最新文章

  1. AI识别彻底懵逼,这到底是“牛”还是“鲨”?
  2. linux 使用FIO测试磁盘iops
  3. CentOS下安装JDK7 转载
  4. 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
  5. 下一步工作,尽量将代码整理归拢成可以随意组合拆装的代码块。
  6. 点击SAP Fiori Launchpad某个tile后遇到的错误消息如何解决
  7. 注意力机制--转载自我的学生隆兴写的博客
  8. 字节跳动AI Lab 算法岗专属内推码!
  9. aspx头部代码%@ Page Language=C# AutoEventWireup=true CodeFile=ceshi.aspx.cs Inherits=SM_ceshi %
  10. 软件测试学习之 ---------- MySQL的查询(重中之重)
  11. windows下使用conda命令在anaconda环境中安装caffe
  12. paip.为什么使用多线程的原因.
  13. e-HR推动知识型企业人力资源管理提升
  14. 【整站下载器】小飞兔整站下载V5.0
  15. SD卡无法格式化方法介绍
  16. 微信公众号推文(编辑+排版教程)
  17. 阿里云服务器相关操作
  18. 高等数学学习笔记——第三十二讲——泰勒公式
  19. 我在阿里做测试这5年总结的7条生存经验。
  20. python 管线原理图_Q-Q图原理详解及Python实现

热门文章

  1. 紫猫数据库使用 (二)
  2. Kubuntu 22.04的安装及基本配置(语言、分辨率自适应等)
  3. 青云决最新服务器,青云决合区表
  4. 服务器安全防护和保护措施方案-数据湾
  5. coff2omf matlab,OMF和COFF格式有什么区别?
  6. html超链接调用js函数,在html中引入外部js文件,并调用带参函数的方法
  7. 微信小程序 短信验证码
  8. 我在淘宝帮别人写代码,月入10万!
  9. 对计算机网络的认识论文800,对计算机的认识论文
  10. C++洛谷题解(24)——P1422