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