100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android自定义View 跟随手指滑动效果

Android自定义View 跟随手指滑动效果

时间:2021-12-22 05:10:43

相关推荐

Android自定义View 跟随手指滑动效果

Android自定义View,实现跟随手指滑动效果,

效果如下:

一,重写onTouchEvent方法 最后返回true

二,在MotionEvent.ACTION_MOVE情况下改变自定义view 的位置

代码如下:

public class FollowView extends TextView {private Context context;private float x = 0;//点击时候坐标位置private float y = 0;private float startx;//自定义view的开始坐标位置private float statty;public FollowView(Context context) {this(context, null);}public FollowView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public FollowView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN://获取点击的xy坐标x = event.getRawX();y = event.getRawY();Log.d("mile","event.getRawX():"+event.getRawY());Log.d("mile","event.getRawY():"+event.getRawY());//新建一个Rect来获取当前view的坐标位置Rect rect = new Rect();this.getGlobalVisibleRect(rect);startx = (rect.left); //设置当前view x坐标位置//获取状态来的高度Rect frame = new Rect();((Activity) getContext()).getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;statty = (rect.top - statusBarHeight);//设置当前view y坐标 需要减去状态来高度break;case MotionEvent.ACTION_MOVE:Log.d("mile","MotionEvent.ACTION_MOVE");//根据手指移动来算出移动的xy坐标this.setTranslationX(startx + event.getRawX() - x);this.setTranslationY(statty + event.getRawY() - y);break;case MotionEvent.ACTION_UP:break;}return true;}}

布局中使用

<com.goodboy.mile.View.FollowViewandroid:id="@+id/follow_view"android:layout_width="50dp"android:layout_height="50dp"android:background="@color/colorAccent"android:text="@string/app_name"/>

注:之前我在获取滑动的坐标的时候是使用MotionEvent中的getX()方法,发现有闪烁的问题,后来改成MotionEvent中的getRawX()方法就好了,

那么getX()与getRawX()有什么区别呢?

getX()是表示Widget相对于自身左上角的x坐标

而getRawX()是表示相对于屏幕左上角的x坐标值

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。