1

線形レイアウトを複数回追加myCustomViewしています。customViewの最初のインスタンスでは正常に機能していますが、複数回追加することはできません。

カスタムビュークラスは次のとおりです。

public class MultiTouchView extends View {

      private float x, y;
      Bitmap image;

      public MultiTouchView(Context context, Bitmap image) {
       super(context);
       this.image = image;

       // TODO Auto-generated constructor stub
      }

      public MultiTouchView(Context context, AttributeSet attrs) {
            super(context, attrs);
          }

          public MultiTouchView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
          }

      @Override
      protected void onDraw(Canvas canvas) {
       // TODO Auto-generated method stub       
        canvas.drawBitmap(image, x, y, null);
      }

      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
       // TODO Auto-generated method stub

          super.onMeasure(widthMeasureSpec, heightMeasureSpec);
          setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
             MeasureSpec.getSize(heightMeasureSpec));   
      }

      @Override
      public boolean onTouchEvent(MotionEvent event) {
       // TODO Auto-generated method stub

       int action = event.getAction();
       switch(action){
       case MotionEvent.ACTION_MOVE:
        x = event.getX();
        y = event.getY();

        break;
       case MotionEvent.ACTION_DOWN:

        x = event.getX();
        y = event.getY();

        break;
       case MotionEvent.ACTION_UP:
        break;

       }

       invalidate();
       return true;
      } 
     }

これは私がカスタムビューを追加しているクラスです:

public class AndroidTouch extends Activity {

    LinearLayout linear;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        linear = (LinearLayout)findViewById(R.id.linear);

          Bitmap backgroundCard = BitmapFactory.decodeResource(
                    getResources(), R.drawable.ic_launcher);

        MultiTouchView mt1 = new MultiTouchView(this, backgroundCard);
        linear.addView(mt1);

         Bitmap backgroundCard2 = BitmapFactory.decodeResource(
        getResources(), R.drawable.icon);
         MultiTouchView mt2 = new MultiTouchView(this, backgroundCard2);
         linear.addView(mt2);
    }
}
4

1 に答える 1

0

MultiTouchViewビューに背景色を設定すると、画面全体の色が、追加された2番目のビューの色と同じであることがわかります。

子ビューのレイアウトパラメータを指定し、ビューを画面に描画することができました。変更されたコード:

public class AndroidTouch extends Activity {

    LinearLayout linear;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_c);

        linear = (LinearLayout)findViewById(R.id.main);

        Bitmap backgroundCard = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
        int w = backgroundCard.getWidth();
        int h = backgroundCard.getHeight();
        LayoutParams params = new LayoutParams(w, h);
        MultiTouchView mt1 = new MultiTouchView(getApplicationContext(), backgroundCard);
        //mt1.setBackgroundColor(Color.RED);//try uncommenting this wihtout layout params change
        linear.addView(mt1, params);


        Bitmap backgroundCard2 = BitmapFactory.decodeResource(getResources(), R.drawable.image2);
        params = new LayoutParams(backgroundCard2.getWidth(), backgroundCard2.getHeight());
        MultiTouchView mt2 = new MultiTouchView(getApplicationContext(), backgroundCard2);
        //mt1.setBackgroundColor(Color.BLUE);<-- Entire screen turns blue
        linear.addView(mt2, params);
    }
}

コード変更後のスクリーンショット しかし、私はあなたがこの後に別の問題に直面すると信じています。コードから、タッチした位置にビューを描画しようとしていることがわかります。1つのカスタムビューを使用し、同じビューに複数の画像を追加することをお勧めします。この場合のみ、どのビューを別の座標で描画する必要があり、どのビューを同じままにするかを決定する必要があります。

お役に立てれば

于 2012-11-15T14:01:12.773 に答える