1
我有两个不同大小的相对布局的画廊。后面的画廊比上面的画廊小,所以我希望画廊后面的触摸事件作出反应,如果两个画廊的公共部分被触摸,否则上面的画廊应该反应。目前只有上面的画廊正在反应。你有什么想法如何实现这一点?Android将触摸事件从一个画廊传递到另一个画廊
我有两个不同大小的相对布局的画廊。后面的画廊比上面的画廊小,所以我希望画廊后面的触摸事件作出反应,如果两个画廊的公共部分被触摸,否则上面的画廊应该反应。目前只有上面的画廊正在反应。你有什么想法如何实现这一点?Android将触摸事件从一个画廊传递到另一个画廊
我没有尝试,但是这可以帮助你:
覆盖onTouchEvent
在gallary1
,然后复制MotionEvent
并将它传递给其他GALLARY让它命名为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;
}
}
'我想画廊从背后触摸事件作出反应,如果两个画廊的公用部分是touched'。那么为什么不让这个小人物在大一点之上呢? – iTurki