android 可移动view,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();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值