1
我有一些意見的問題。我創建了我自己的視圖(Square),我想移動我放在屏幕上的任何方塊。通過菜單,我可以將其他方塊放在屏幕上。事情是,當節目開始時,我在屏幕上有一個正方形,我可以移動它。但是當我把其他廣場,我可以移動最後一個。我怎樣才能解決這個問題?如何在Android中移動多個視圖?
public class Square extends View {
private float x, y, width, height;
private int screenW, screenH;
public boolean isInside = false;
public int id=0;
public Square(Context context, int aid, int asw, int ash, float aw, float ah) {
super(context);
id = aid;
screenH = ash;
screenW = asw;
x = asw/2;
y = ash/2;
width = aw;
height = ah;
}
protected void onDraw(Canvas canvas){
Paint paint = new Paint();
paint.setColor(Color.BLACK);
canvas.drawLine(x, y, x+width, y, paint);
canvas.drawLine(x, y, x, y+height, paint);
canvas.drawLine(x+width, y+height, x+width, y, paint);
canvas.drawLine(x+width, y+height, x, y+height, paint);
}
public void setPosition(float x, float y){
this.x = x-width/2;
this.y = y-height/2;
//invalidate();
}
public int contains(float ax, float ay){
if(ax==x || (ax<(x+width) && ax > x) || ax==(x+width))
if(ay==y || (ay<(y+height) && ay > y) || ay==(y+height))
return id;
return -1;
}
}
public class SquareBuilder extends Activity {
private int width, height;
//private RelativeLayout layout;
private FrameLayout layout;
private int id=0;
private ArrayList<Square> squareList;
Square squareTouched;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_square_builder);
Display display = null;
display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
width = outMetrics.widthPixels;
height = outMetrics.heightPixels;
Log.i("Display size", "Width: "+width+" Height: "+height);
Log.i("Display size", "Width: "+width/2+" Height: "+height/2);
//layout = new RelativeLayout(this);
layout = new FrameLayout(this);
squareList = new ArrayList<Square>();
Square sqr = new Square(this, id++, (int) width, (int)height,50,50);
sqr.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Square sqr = (Square) v;
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
if(sqr.contains(event.getX(),event.getY())>=0)
sqr.isInside = true;
break;
case MotionEvent.ACTION_MOVE:
if(sqr.isInside)
sqr.setPosition(event.getX(),event.getY());
break;
case MotionEvent.ACTION_UP:
sqr.isInside = false;
break;
}
sqr.invalidate();
//return super.onTouchEvent(event);
return true;
//return false;
}
});
squareTouched = null;
squareList.add(sqr);
layout.addView(sqr);
setContentView(layout);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_square_builder, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.menu_other:
Square sqr = new Square(this, id++, (int) width, (int) height,50,50);
sqr.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Square sqr = (Square) v;
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
if(sqr.contains(event.getX(),event.getY())>=0)
sqr.isInside = true;
break;
case MotionEvent.ACTION_MOVE:
if(sqr.isInside)
sqr.setPosition(event.getX(),event.getY());
break;
case MotionEvent.ACTION_UP:
sqr.isInside = false;
break;
}
sqr.invalidate();
//return super.onTouchEvent(event);
return true;
//return false;
}
});
squareList.add(sqr);
layout.addView(sqr);
setContentView(layout);
break;
}
return super.onOptionsItemSelected(item);
}
}