android自定义拖拽验证框

public class TouchPictureV extends View {
    private Bitmap bgBitmap;//背景
    private Paint mPaintbg;//背景画笔ull
    private Bitmap mNullBitmap;//空白快
    private Paint mPaintNull;//空白块画笔
    private Bitmap mMoveBitmap;//移动方块
    private Paint mPaintMove;//移动画笔
    private int mWidth;//View的宽
    private int mHeight;//View的高
    private int card_size=0;
    private int null_w,null_h;
    private int move_w=200;
    private int downX,downY;
    private boolean flag=false;
    private OnViewResultListent viewResultListent;

    public void setViewResultListent(OnViewResultListent viewResultListent) {
        this.viewResultListent = viewResultListent;
    }

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

    public TouchPictureV(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public TouchPictureV(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init(){
        mPaintbg=new Paint();
        mPaintNull=new Paint();
        mPaintMove=new Paint();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mWidth=w;
        mHeight=h;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawBg(canvas);
        drawNull(canvas);
        drawMove(canvas);
    }

    /**
     * 绘制移动方块
     * @param canvas
     */
    private void drawMove(Canvas canvas) {
        mMoveBitmap=Bitmap.createBitmap(bgBitmap,null_w,null_h,card_size,card_size);
        canvas.drawBitmap(mMoveBitmap,move_w,null_h,mPaintMove);
    }

    /**
     * 绘制空白块
     * @param canvas
     */
    private void drawNull(Canvas canvas) {
        //1.获取图片
        mNullBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.img_null_card);
        //2.计算值
        card_size=mNullBitmap.getWidth();
        null_w=bgBitmap.getWidth()-(200+card_size);
        null_h=bgBitmap.getHeight()/2-(card_size/2);
        //绘制
        canvas.drawBitmap(mNullBitmap,null_w,null_h,mPaintNull);
    }

    /**
     * 绘制背景
     * @param canvas
     */
    private void drawBg(Canvas canvas) {
        //1.获取图片
        Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img_bg);
        //2.创建一个空的bitmap bitmap w h=view w h
        bgBitmap=Bitmap.createBitmap(mWidth,mHeight, Bitmap.Config.ARGB_8888);
        //3.将图片绘制到空的bitmapo
        Canvas bgCanvas=new Canvas(bgBitmap);
        bgCanvas.drawBitmap(mBitmap,null,new Rect(0,0,mWidth,mHeight),mPaintbg);
        //4.将bgBitmap绘制到view上
        canvas.drawBitmap(bgBitmap,null,new Rect(0,0,mWidth,mHeight),mPaintbg);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                downX= (int) event.getX();
                downY= (int) event.getY();
                //判断,当我们只有点击到拖拽框时才可以进行拖拽
                if(downX>move_w&&downX<mMoveBitmap.getWidth()+move_w
                &&downY>null_h&&downY<null_h+card_size{
                    flag=true;
                }else{
                    flag=false;
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (flag){
                    if (event.getX()>0&&event.getX()<mWidth-card_size){
                        move_w= (int) event.getX()-card_size/2;
                        invalidate();
                    }
                }
                break;
            case MotionEvent.ACTION_UP:
                if (move_w>(null_w-10)&&move_w<null_w+10){
                    if (viewResultListent!=null){
                        viewResultListent.onResult();
                        move_w=200;
                        invalidate();
                    }
                }else{
                //将我们的拖拽框改为原先位置
                    move_w=200;
                    invalidate();
                }
                break;
        }
        return true;
    }
    public interface OnViewResultListent{
        void onResult();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值