Android实现控件拖动效果

今天实现一个控件的拖动效果,效果图如下:

这里写图片描述
不多说,下面说下实现步骤:
1.将布局文件创建:
这是包裹的内容

   android:id="@+id/llt"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:orientation="horizontal"
   android:gravity="center_vertical"
   android:background="#07E9FF">
   <ImageView
       android:src="@drawable/aas"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       />
   <TextView
       android:id="@+id/tv"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="拖着移动"

       android:textSize="18sp"
       android:textColor="#ffffff"/>

这是父控件的内容

android:id="@+id/tvb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#FF1F00"
android:padding="10dp"
android:layout_margin="10dp"
android:gravity="center_horizontal"
android:text="按住提示框拖到任意位置\n按手机返回键立即生效"
android:textColor="#000000"
android:textSize="17sp"

2.初始化控件,设置点击方法:
llt = (LinearLayout) findViewById(R.id.llt);
setTouch();
3.设置event的点击方式:按下,移动,松开的事件处理
(1)按下时获取按下的坐标(是手指的坐标而不是控件):

            case MotionEvent.ACTION_DOWN:
                //按下的
                System.out.println("按下了..");
                rawX = (int) event.getRawX();
                rawY = (int) event.getRawY();
                break;

(2)移动时设置便宜,移动坐标,绘制布局文件:

       case MotionEvent.ACTION_MOVE:
                //移动的事件
                System.out.println("移动了..");
                newX = (int) event.getRawX();
                newY = (int) event.getRawY();
                dX = newX-rawX;
                dY = newY-rawY;
                //移动的时候原控件的坐标
                int l=llt.getLeft();
                int t=llt.getTop();
                //新控件的坐标
                l+=dX;
                t+=dY;
                int r=l+llt.getWidth();
                int b=t+llt.getHeight();
                llt.layout(l, t, r, b);
                //更新坐标
                rawX=newX;
                rawY=newY;
                break;

(3)松开的时候:

              case MotionEvent.ACTION_UP:
                //抬起的事件
                System.out.println("抬起了..");
                break;

(最后)

注意return true,否则会认为一直执行而无法执行后面的事件;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值