自定义View在指定范围内随手指移动而移动

上图:

代码:

public class MyTouchView extends View{

    private Bitmap mBitmap;
    private int mStartX,mStartY;
    private int mLeft,mTop,mRight,mBottom;
    private int mBitWidth,mBitHeight;
    private boolean isTouch = false;


    public MyTouchView(Context context) {
        super(context);
        init();
    }

    public MyTouchView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }



    private void init(){
         mBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.girl);
         mBitWidth = mBitmap.getWidth();
         mBitHeight = mBitmap.getHeight();
         mLeft = 0;
         mRight = 0;
         mRight = mBitWidth;
         mBottom = mBitHeight;

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(mBitmap,mLeft,mTop,null);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                mStartX = (int) event.getRawX();
                mStartY = (int) event.getRawY();
                isTouch = isTouch(mStartX,mStartY);
                break;
            case MotionEvent.ACTION_MOVE:
                if (isTouch) {
                    //计算出需要移动的距离
                    int dx = (int) event.getRawX() - mStartX;
                    int dy = (int) event.getRawY() - mStartY;
                    mLeft = mLeft + dx;
                    mTop = mTop + dy;
                    mRight = mLeft + mBitWidth;
                    mBottom = mTop + mBitHeight;
                    invalidate();
                    //记录最后一次移动的位置
                    mStartX = (int) event.getRawX();
                    mStartY = (int) event.getRawY();
                }
                break;
        }
        return true;
    }


    private boolean  isTouch(int touchX,int touchY){
        Rect rect = new Rect(mLeft, mTop,mRight,mBottom);
        return rect.contains(touchX,touchY);
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值