import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.xxxx.DensityUtil;
public class MoveTransferView extends View {
Paint paint;
private int fixedX;
private int fixedY;
private int rangeY;
private int measuredHeight;
private Bitmap bitmap;
private int bitmapHeight;
private int bitmapWidth;
public MoveTransferView(Context context) {
super(context);
initView(context, null, 0);
}
public MoveTransferView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView(context, attrs, 0);
}
public MoveTransferView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs, defStyleAttr);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public MoveTransferView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
initView(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measuredHeight = getMeasuredHeight();
int i = DensityUtil.dp2px(getContext(), 32);
y = measuredHeight - i;
y = y - bitmapHeight / 2;
}
private void initView(Context context, AttributeSet attrs, int defStyleAttr) {
paint = new Paint();
paint.setColor(Color.WHITE);
// int i = DensityUtil.sp2px(getContext(), 14);
paint.setAntiAlias(true);
paint.setTextAlign(Paint.Align.CENTER);
int windowWidth = DensityUtil.getWindowWidth(getContext());
fixedX = windowWidth - DensityUtil.dp2px(getContext(), 12);
fixedY = windowWidth - DensityUtil.dp2px(getContext(), 32);
rangeY = DensityUtil.dp2px(getContext(), 60);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_d_plze2_xh);
bitmapWidth = bitmap.getWidth();
bitmapHeight = bitmap.getHeight();
fixedX = fixedX - bitmapWidth;
}
float y;
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean touch = super.onTouchEvent(event);
float downX = 0;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//判断点击是否是图片位置
float downY = event.getY();
downX = event.getX();
if (downX < fixedX || downX > fixedX + bitmapWidth) {
touch = super.onTouchEvent(event);
} else {
if (downY < this.y || downY > this.y + bitmapHeight) {
touch = super.onTouchEvent(event);
} else {
touch = true;
}
}
break;
case MotionEvent.ACTION_MOVE:
downX = event.getX();
if (downX < fixedX || downX > fixedX + bitmapWidth) {
touch = super.onTouchEvent(event);
} else {
this.y = event.getY();
if (Math.abs(this.y - fixedY) > rangeY) {
if (this.y > fixedX) {
this.y = fixedY + rangeY;
} else {
this.y = fixedY - rangeY;
}
}
this.y = this.y - bitmapHeight / 2;
invalidate();
touch = true;
}
break;
case MotionEvent.ACTION_UP:
downX = event.getX();
float downYUp = event.getY();
if (downX < fixedX || downX > fixedX + bitmapWidth) {
touch = super.onTouchEvent(event);
} else {
if (downYUp < this.y || downYUp > this.y + bitmapHeight) {
touch = super.onTouchEvent(event);
} else {
if (listener != null)
listener.onClick();
}
}
break;
}
return touch;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(bitmap, fixedX, y, paint);
}
OnClickListener listener;
public interface OnClickListener {
void onClick();
}
public void setBitmapOnClickListener(OnClickListener listener) {
this.listener = listener;
}
}