gpt4 book ai didi

Android: View.setClickable 消费点击事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:07 25 4
gpt4 key购买 nike

我有一个用于水平滚动的自定义画廊 View 和几个都应该可点击的 subview 。

设置 childview.setOnClickListener() 不起作用,因为它总是消耗触摸事件。

因此,我使用了 childview.setOnTouchListener() 并让它的 onTouch 方法返回 false,这样 Gallery 就可以滚动了。

这一切都很好。

现在的问题是,childView 的 onTouch 方法只触发 ACTION_DOWN 事件。它不会传递 MotionEvent ACTION_UP,除非我通过设置 childview.setClickable() 使 View 可点击。但是,将 View 设置为可点击本身似乎会消耗 onTouch 事件,从而使图库 View 变得不可滚动。

我好像在绕圈子。如果有任何帮助,我将不胜感激。

这是我的代码

图库 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;
}
}

在我的 Activity 中:

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) {}
});
}

最佳答案

如果我是你,我会尝试覆盖 ViewGroup.onInterceptTouchEvent(...) 方法而不是设置 OnTouchListener。通过这种方式,您应该能够拦截触摸事件而无需实际使用它们。

Check out javadoc .

关于Android: View.setClickable 消费点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com