1

長方形で塗りつぶされたフィールドを作成しようとしています。指を動かすと、その下の長方形の色が変わります。私は多くの方法を試しましたが、成功しませんでした。他にアイデアがありません。私のコードは次のようになります。問題は、指が画面の左上隅にあり、すべての長方形に色が付けられている場合にのみ、(オンタッチで) 色付けがアクティブになることです。

public class MainActivity extends Activity implements OnTouchListener {
ImageView[][] buttons;
Button b;
TableLayout ButtonContainer; 
RelativeLayout linar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    buttons=new ImageView[5][5];
    linar=new RelativeLayout(this);
    linar.setOnTouchListener(this);

    setPos(0,0,100);
    setContentView(linar);
}

void setPos(float startX, float startY, int size)
{
    float actposX,actposY;
    actposX=startX;
    actposY=startY;
    for (int i=0;i<5;i++){

        for (int j=0;j<5;j++){
            buttons[i][j]=new ImageView(this);
            buttons[i][j].setLayoutParams(new RelativeLayout.LayoutParams(size, size));
            buttons[i][j].setX(actposX);
            buttons[i][j].setY(actposY);
            if (j % 2 ==0){
                buttons[i][j].setBackgroundColor(Color.YELLOW);
            }
            else
            {   buttons[i][j].setBackgroundColor(Color.BLUE);   }
            actposX+=size;
            linar.addView(buttons[i][j]);
        }
        actposY+=size;
        actposX=startX;
    }

}

@Override
public boolean onTouch(View v, MotionEvent event) {

    for(int i =0; i< 5; i++)
        {
           for (int j=0; j< 5; j++)
           {
               Rect outRect = new Rect(buttons[i][j].getLeft(), buttons[i][j].getTop(), buttons[i][j].getRight(), buttons[i][j].getBottom());
               if(outRect.contains((int)event.getX(), (int)event.getY()))
                {
                    buttons[i][j].setBackgroundColor(Color.RED);
                }
           }
        }

    return true;
}

}

4

2 に答える 2

0

私はそれを理解しました... getLeft()、getTop()..は0の値を返すので、これで変更しました:

                   outRect.top=(int) (buttons[i][j].getY());
               outRect.bottom=(int) (buttons[i][j].getY()+buttons[i][j].getLayoutParams().height);
               outRect.left=(int) (buttons[i][j].getX());
               outRect.right=(int) (buttons[i][j].getX()+buttons[i][j].getLayoutParams().height);
于 2013-03-03T15:56:29.810 に答える
0

あなたはそのようなことをすることができます、

     @Override
                public boolean onTouchEvent(MotionEvent event) {
                    // TODO Auto-generated method stub
                    final int action = event.getAction();

                    switch (action & MotionEventCompat.ACTION_MASK) {
                    case MotionEvent.ACTION_DOWN:
                        event.getX();
event.getY();

                        Log.d(TAG, "onTouchEvent DOWN: x " + selX + ", y " + selY);
                        break;

                    case MotionEvent.ACTION_MOVE:
                        event.getX();
                                event.getY();
                        Log.d(TAG, "onTouchEvent Move: x " + selX + ", y " + selY);
                        break;

                    case MotionEvent.ACTION_UP:
                        event.getX();
                                event.getY();
                        Log.d(TAG, "onTouchEvent UP: x " + selX + ", y " + selY);

                        break;
                    }

                    return true;
                }

MotionEvent.ACTION_MOVEはポインターの動きを検出します。ポインターを取得して、塗りつぶしの部分を実行できます。理解を深めるためにlogcatもチェックしてください..頑張ってください!

于 2013-03-01T12:25:45.693 に答える