Android开发 DragView 可拖动的View/ImageView

释放双眼,带上耳机,听听看~!
package view;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Scroller;
/**
* Created by abc on 2017/3/29.
*/
public class DragView extends View {
Scroller mScroller;
public DragView(Context context) {
super(context);
mScroller = new Scroller(context);
}
public DragView(Context context, AttributeSet attrs) {
super(context, attrs);
mScroller = new Scroller(context);
}
public DragView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mScroller = new Scroller(context);
}
public DragView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mScroller = new Scroller(context);
}
int lastX, lastY, offsetX, offsetY;
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
//2
int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = rawX;
lastY = rawY;
break;
case MotionEvent.ACTION_MOVE:
offsetX = rawX - lastX;
offsetY = rawY - lastY;
//                offsetX = x - lastX;
//                offsetY = y - lastY;
//                offsetLeftAndRight(offsetX);
//                offsetLeftAndRight(offsetY);
layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY);
Log.e("lyf", " " + getLeft() + offsetX + " " + getTop() + offsetY + " " + getRight() + offsetX + " " + getBottom() + offsetY);
lastX = rawX;
lastY = rawY;
break;
case MotionEvent.ACTION_UP:
View viewGroup = (View) getParent();
mScroller.startScroll(viewGroup.getScrollX(), viewGroup.getScrollY(), -viewGroup.getScrollX(), -viewGroup.getScrollY());
invalidate();
break;
}
return true;
}
@Override
public void layout(int l, int t, int r, int b) {
super.layout(l, t, r, b);
}
@Override
public void computeScroll() {
super.computeScroll();
//判断Scroller是否执行完毕
if (mScroller.computeScrollOffset()) {
((View) getParent()).scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
//通过重绘来不断调用computeScroll
invalidate();
}
}
}

 

人已赞赏
Android文章

android异步加载图片并缓存到本地的方法

2020-1-28 13:29:26

Android文章

android开发dialog自定义实例详解

2020-1-28 14:29:33

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索