問題:
1 . 累加問題:“點擊坐標”坐標在移動時必須改變位置,不然將導致累加過載
2. 圓形改變問題,每次重繪時圓必將改變位置
3. 圖片平移:圓在移動時只要
public class MovingBlockView extends View {
//畫筆
Paint paint = new Paint();
Region circleRegion;
Path circlePath;
private boolean Move;
/*圓心*/
private float x = 300;
private float y = 300;
/*點擊坐標*/
private float ClickX = 0;
private float ClickY = 0;
/*圓心移動距離*/
private float moveX;
private float moveY;
/*
* 圓形拖到問題:
* 1 ,累加問題:“點擊坐標”坐標在移動時必須改變位置,不然將導致累加過載
* 2. 圓形改變問題,每次重繪時圓必將改變位置
* 3.圖片平移:圓在移動時只要
*
* */
public MovingBlockView(Context context) {
this(context, null);
}
public MovingBlockView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public MovingBlockView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
/*mPaint = new Paint();
mPaint.setColor(Color.RED);*/
paint.setColor(Color.RED);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
circlePath = new Path();
x = x + moveX;
y = y + moveY;
circlePath.addCircle(x, y, 300, Path.Direction.CW);
Region region = new Region(0, 0, getMeasuredWidth(), getMeasuredHeight());
circleRegion = new Region();
circleRegion.setPath(circlePath, region);
canvas.drawPath(circlePath, paint);
canvas.drawLine(x + moveX, 0, x + moveX, getHeight(), paint);
canvas.drawLine(0, y + moveY, getWidth(), y + moveY, paint);
// canvas.drawCircle();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
boolean contains = circleRegion.contains((int) event.getX(), (int) event.getY());
if (contains) {
// Toast.makeText(getContext(), "點擊了圓", Toast.LENGTH_LONG).show();
Move = true;
ClickX = event.getX();
ClickY = event.getY();
Log.d(TAG, "ACTION_DOWN: " + ClickX);
Log.d(TAG, "ACTION_DOWN: " + ClickY);
}
} else if (action == MotionEvent.ACTION_UP) {
x = x + moveX;
y = y + moveY;
Move = false;
Log.d(TAG, "ACTION_UP: ");
} else if (action == MotionEvent.ACTION_MOVE) {
if (Move) {
Log.d(TAG, "ACTION_MOVE: ");
moveX = event.getX() - ClickX;
moveY = event.getY() - ClickY;
ClickX = event.getX();
ClickY = event.getY();
Log.d(TAG, "ACTION_MOVE: " + moveX);
Log.d(TAG, "ACTION_MOVE: " + moveY);
invalidate();
}
}
return super.onTouchEvent(event);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/278493.html
標籤:其他
下一篇:cordava 打包安卓真機運行
