1

互いの上にある相対レイアウトでサイズが異なる2つのギャラリーがあります。背後のギャラリーは上のギャラリーよりも小さいので、2 つのギャラリーの共通部分がタッチされた場合、背後のギャラリーがタッチ イベントに反応し、それ以外の場合は上のギャラリーが反応する必要があります。現在、上記のギャラリーのみが反応しています。これを実現する方法はありますか?

4

1 に答える 1

0

私はそれを試していませんが、これはあなたを助けるかもしれません:

をオーバーライドonTouchEventしてgallary1から、をコピーMotionEventして他のギャラリーに渡し、次のように名前を付けますgallary1

@Override
    public boolean onTouchEvent(MotionEvent event) {

        MotionEvent event2=MotionEvent.obtain(event);
        gallery2.onTouchEvent(event2);

        return super.onTouchEvent(event);
    }

完全なコード (動作):

public class MyGallary extends Gallery {

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

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

public MyGallary(Context context) {
    super(context);
  }

    private MyTouchListener myTouchListener;

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (myTouchListener != null) {
            myTouchListener.onTouch(event);
        }
        return super.onTouchEvent(event);
    }

    public MyTouchListener getMyTouchListener() {
        return myTouchListener;
    }

    public void setMyTouchListener(MyTouchListener myTouchListener) {
        this.myTouchListener = myTouchListener;
    }

}

public interface MyTouchListener {

    public void onTouch(MotionEvent event);

}

public class MainActivity extends Activity {

    MyGallary gallary1;
    Gallery gallary2;
    MyTouchListener listener1;

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

        gallary1 = (MyGallary) findViewById(R.id.myGallary1);
        listener1 = new MyTouchListener() {

            @Override
            public void onTouch(MotionEvent event) {
                MotionEvent event2 = MotionEvent.obtain(event);
                gallary2.onTouchEvent(event2);

            }
        };
        gallary1.setMyTouchListener(listener1);

        gallary2 = (Gallary) findViewById(R.id.Gallary2);

        int[] array = new int[] { R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher };

        ImageAdapter adapter1 = new ImageAdapter(array);
        gallary1.setAdapter(adapter1);

        ImageAdapter adapter2=new ImageAdapter(array);
        gallary2.setAdapter(adapter2);

    }

    class ImageAdapter extends BaseAdapter {

        int[] array;

        public ImageAdapter(int[] array) {
            this.array = array;
        }

        @Override
        public int getCount() {
            return array.length;
        }

        @Override
        public Object getItem(int position) {

            return array[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                ImageView imageView = new ImageView(MainActivity.this);
                Gallery.LayoutParams params = new Gallery.LayoutParams(
                        Gallery.LayoutParams.MATCH_PARENT,
                        Gallery.LayoutParams.MATCH_PARENT);

                imageView.setLayoutParams(params);

                convertView = imageView;

            }

            ImageView imageView = (ImageView) convertView;
            imageView.setImageResource((Integer) getItem(position));

            return convertView;
        }
    }
于 2012-10-29T21:59:37.523 に答える