水平スクロール用のカスタム ギャラリー ビューと、すべてクリック可能ないくつかの子ビューがあります。
常にタッチイベントを消費するため、設定childview.setOnClickListener()
は機能しません。
したがって、childview.setOnTouchListener()
ギャラリーがスクロール可能になるように、onTouch メソッドを使用して false を返すようにしました。
これで問題ありません。
問題は、childView の onTouch メソッドがACTION_DOWNイベントのみを発生させることです。を設定してビューをクリック可能にしない限り、 MotionEvent ACTION_UPは渡されませんchildview.setClickable()
。ただし、ビューをクリック可能に設定すること自体が onTouch イベントを消費するように見えるため、ギャラリー ビューはスクロールできなくなります。
ここで輪になっていくようです。どんな助けにも感謝します。
これが私のコードです
ギャラリー ビュー:
public class myGallery extends Gallery {
public myGallery(Context ctx, AttributeSet attrSet) {
super(ctx, attrSet);
// TODO Auto-generated constructor stub
}
private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2){
return e2.getX() > e1.getX();
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
int kEvent;
if(isScrollingLeft(e1, e2)){ //Check if scrolling left
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
}else{ //Otherwise scrolling right
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return true;
}
}
私の活動で:
gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// childView.setClickable(true); // can't use this
// click event would get consumed
// and gallery would not scroll
// therefore, I can only use the ACTION_DOWN event below:
childView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//doStuff();
}
return false;
}
});
}
public void onNothingSelected(AdapterView<?> arg0) {}
});
}