조회수에 문제가 있습니다. 나는 내 자신의 View (Square)를 만들었고 나는 스크린 위에 놓았던 사각형을 움직이고 싶다. 메뉴를 사용하면 다른 사각형을 화면에 표시 할 수 있습니다. 문제는 프로그램이 시작될 때 화면에 사각형이 하나 있고 움직일 수 있다는 것입니다. 하지만 다른 사각형을 넣으면 마지막으로 옮길 수 있습니다. 이 문제를 어떻게 해결할 수 있습니까?Android에서 여러 개의보기를 이동하는 방법은 무엇입니까?
private Square newSquare() { ...
그런 다음 생성을위한 중복 코드를 대체 :
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);
}
}