私は水平スクロールのためのカスタムギャラリービューと、すべてがクリック可能ないくつかの子ビューを持っています。Android:View.setClickableはクリックイベントを消費する
設定childview.setOnClickListener()
は、常にタッチイベントを消費するため動作しません。
したがって、childview.setOnTouchListener()
を使用し、そのonTouchメソッドがfalseを返すようにして、ギャラリーがスクロール可能になるようにしました。
これはすべて問題ありません。
問題は今、childViewのonTouchメソッドは、ACTION_DOWNイベントを発生させるだけです。 childview.setClickable()
を設定してViewをクリック可能にしない限り、MotionEvent ACTION_UPは渡されません。 しかし、Viewのclickableを設定すると、onTouchイベントが消費されるようになり、ギャラリーViewはスクロールできなくなります。
ここでは円のように見えます。私はどんな助けにも感謝しています。私の活動で
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) {}
});
}
あなたは後半に回答を得ましたか? – Prateek