我使用以下类(android 中的简单 2D 图形)在我的视图上创建了两个位图,并徘徊以实现该位图可以独立移动。我为此调用motionevent方法。
当前问题,我不明白为什么只有一个对象在以下代码中向右移动。例如,使用此代码,仅移动“不”位图,我想独立移动两个位图。
场景:我可以使用我的两个手指,每个对象一个,独立移动位图。但我不知道如何实现这一点。
public class TouchView extends View {
private Drawable cross;
private Rect crossBounds = null;
private Drawable not;
private Rect notBounds = null;
private int x1, y1, x2, y2 ;
boolean flag = true;
private void intialize ()
{
int w1 = cross.getIntrinsicWidth();
int h1 = cross.getIntrinsicHeight();
x1 = 100;
y1 = 100;
crossBounds = new Rect(x1-w1/2, y1-w1/2, x1+w1/2, y1+h1/2);
int w = not.getIntrinsicWidth();
int h = not.getIntrinsicHeight();
x2 = 300;
y2 = 300;
notBounds = new Rect(x2-w/2, y2-w/2, x2+w/2, y2+h/2);
}
public TouchView(Context context) {
super(context);
// Get a representation of the image
Resources resources = context.getResources();
cross = (Drawable) resources.getDrawable(R.drawable.cross);
not = (Drawable) resources.getDrawable(R.drawable.not);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.i("TouchView.onTouchEvent", "event = " + event);
if(event.getAction() == MotionEvent.ACTION_DOWN ||
event.getAction() == MotionEvent.ACTION_MOVE) {
int touchCounter = event.getPointerCount();
if (touchCounter ==2 && getHeight ()==y1){
int w = cross.getIntrinsicWidth();
int h = cross.getIntrinsicHeight();
x1 = (int) event.getX();
crossBounds = new Rect(x1-w/2, y1-w/2, x1+w/2, y1+h/2);
}
else
{
int w1 = not.getIntrinsicWidth();
int h1 = not.getIntrinsicHeight();
x2 = (int) event.getX();
notBounds = new Rect(x2-w1/2, y2-w1/2, x2+w1/2, y2+h1/2);
}
// Request the system to redraw the view (call onDraw at
// some point in the future)
// From a non-UI thread, call postInvalidate instead
invalidate();
return true;
}
return false;
}
@Override
protected void onDraw(Canvas canvas) {
Log.i("TouchView.onDraw", "");
// Background
Paint bgPaint = new Paint();
bgPaint.setColor(Color.WHITE);
canvas.drawPaint(bgPaint);
if (flag == true){
intialize ();
cross.setBounds(crossBounds);
cross.draw(canvas);
not.setBounds(notBounds);
not.draw(canvas);
flag=false;
}
if(crossBounds != null) {
cross.setBounds(crossBounds);
cross.draw(canvas);
not.setBounds(notBounds);
not.draw(canvas);
}
}
}