没经验的千行 2018-07-13 08:52 采纳率: 0%
浏览 1053
已结题

Android app开发:按钮拖动后单点按钮 所有按钮回到原来位置

拖动按钮后
图片说明

然后摁了按钮数字7
图片说明
所有按钮回到原位

这是关于按钮7的代码
number[7].setOnTouchListener(new OnTouchListener() {//设置按钮被触摸的时间

                    int lastX, lastY; // 记录移动的最后的位置

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {

                    // TODO Auto-generated method stub
                    int ea = event.getAction();//获取事件类型
                    switch (ea) {
                    case MotionEvent.ACTION_DOWN: // 按下事件

                    lastX = (int) event.getRawX();
                    lastY = (int) event.getRawY();
                    downX = lastX;
                    downY = lastY;
                    break;

                    case MotionEvent.ACTION_MOVE: // 拖动事件


                    // 移动中动态设置位置
                    int dx = (int) event.getRawX() - lastX;//位移量X
                    int dy = (int) event.getRawY() - lastY;//位移量Y
                    int left = v.getLeft() + dx;
                    int top = v.getTop() + dy;
                    int right = v.getRight() + dx;
                    int bottom = v.getBottom() + dy;


                    //++限定按钮被拖动的范围
                    if (left < 0) {

                    left = 0;
                    right = left + v.getWidth();

                    }
                    if (right > screenWidth) {

                    right = screenWidth;
                    left = right - v.getWidth();

                    }
                    if (top < 0) {

                    top = 0;
                    bottom = top + v.getHeight();

                    }
                    if (bottom > v.getHeight()) {

                    bottom = v.getHeight();
                    top = bottom - v.getHeight();

                    }

                    //--限定按钮被拖动的范围

                    v.layout(left, top, right, bottom);//按钮重画


                    // 记录当前的位置
                    lastX = (int) event.getRawX();
                    lastY = (int) event.getRawY();
                    break;

                    case MotionEvent.ACTION_UP: // 弹起事件

                    //判断是单击事件或是拖动事件,位移量大于5则断定为拖动事件

                    if (Math.abs((int) (event.getRawX() - downX)) > 5
                    || Math.abs((int) (event.getRawY() - downY)) > 5)

                    clickormove = false;

                    else

                    clickormove = true;

                    break;

                    }
                    return false;

                    }

                    });

                 number[7].setOnClickListener(new View.OnClickListener() {      
                    public void onClick(View v) {
                        if(clickormove) {
                        utils.soundPlay(7);
                        // TODO Auto-generated method stub
                        if(flag==1){
                            str="";
                            str+=7;
                            et.setText(str);
                            flag=0;
                            }
                         else{
                            str+=7;
                            et.setText(str);
                         }
                        vi=v;
                    }}
                });

  • 写回答

2条回答 默认 最新

  • devmiao 2018-07-13 15:18
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 虚心请教几个问题,小生先有礼了
  • ¥30 截图中的mathematics程序转换成matlab