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();
}
}
android自定义拖拽验证框
最新推荐文章于 2023-11-09 16:30:40 发布