没有针对多指触控处理版本与多指触控处理版本

原文地址http://www.gcssloop.com/customview/multi-touch

没有针对多指触控处理版本
/**
* 一个可以拖图片动的 View
*/
public class DragView1 extends CustomView {
String TAG = “Gcs”;

Bitmap mBitmap;         // 图片
RectF mBitmapRectF;     // 图片所在区域
Matrix mBitmapMatrix;   // 控制图片的 matrix

boolean canDrag = false;
PointF lastPoint = new PointF(0, 0);

public DragView1(Context context) {
    this(context, null);
}

public DragView1(Context context, AttributeSet attrs) {
    super(context, attrs);

    // 调整图片大小
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.outWidth = 960/2;
    options.outHeight = 800/2;

    mBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.drag_test, options);
    mBitmapRectF = new RectF(0,0,mBitmap.getWidth(), mBitmap.getHeight());
    mBitmapMatrix = new Matrix();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            // 判断按下位置是否包含在图片区域内
            if (mBitmapRectF.contains((int)event.getX(), (int)event.getY())){
                canDrag = true;
                lastPoint.set(event.getX(), event.getY());
         }
            break;
        case MotionEvent.ACTION_UP:
            canDrag = false;
        case MotionEvent.ACTION_MOVE:
            if (canDrag) {
                // 移动图片
                mBitmapMatrix.postTranslate(event.getX() - lastPoint.x, event.getY() - lastPoint.y);
                // 更新上一次点位置
                lastPoint.set(event.getX(), event.getY());

                // 更新图片区域
                mBitmapRectF = new RectF(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
                mBitmapMatrix.mapRect(mBitmapRectF);

                invalidate();
            }
            break;
    }

    return true;
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawBitmap(mBitmap, mBitmapMatrix, mDeafultPaint);
}

}

多指触控处理版本
/**
* 一个可以拖图片动的 View
*/
public class DragView extends CustomView {
String TAG = “Gcs”;

Bitmap mBitmap;         // 图片
RectF mBitmapRectF;     // 图片所在区域
Matrix mBitmapMatrix;   // 控制图片的 matrix

boolean canDrag = false;
PointF lastPoint = new PointF(0, 0);

public DragView(Context context) {
    this(context, null);
}

public DragView(Context context, AttributeSet attrs) {
    super(context, attrs);

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.outWidth = 960/2;
    options.outHeight = 800/2;

    mBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.drag_test, options);
    mBitmapRectF = new RectF(0,0,mBitmap.getWidth(), mBitmap.getHeight());
    mBitmapMatrix = new Matrix();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN:
            // ▼ 判断是否是第一个手指 && 是否包含在图片区域内
            if (event.getPointerId(event.getActionIndex()) == 0 && mBitmapRectF.contains((int)event.getX(), (int)event.getY())){
                canDrag = true;
                lastPoint.set(event.getX(), event.getY());
            }
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_POINTER_UP:
            // ▼ 判断是否是第一个手指
            if (event.getPointerId(event.getActionIndex()) == 0){
                canDrag = false;
            }
            break;
        case MotionEvent.ACTION_MOVE:
            // 如果存在第一个手指,且这个手指的落点在图片区域内
            if (canDrag) {
                // ▼ 注意 getX 和 getY
                int index = event.findPointerIndex(0);
                // Log.i(TAG, "index="+index);
                mBitmapMatrix.postTranslate(event.getX(index)-lastPoint.x, event.getY(index)-lastPoint.y);
                lastPoint.set(event.getX(index), event.getY(index));

                mBitmapRectF = new RectF(0,0,mBitmap.getWidth(), mBitmap.getHeight());
                mBitmapMatrix.mapRect(mBitmapRectF);

                invalidate();
            }
            break;
    }

    return true;
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawBitmap(mBitmap, mBitmapMatrix, mDeafultPaint);
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值