将触摸焦点转移到另一个视图

时间:2011-07-18 06:12:48

标签: android events view focus touch

这个问题有点尴尬。是否可以将一个视图的触摸焦点转移到另一个视图?基本上,假设您有一个视图可以获取第一个ACTION_DOWN触摸事件,然后立即想要将所有触摸事件的焦点转移到另一个视图以处理onTouchEvent(MotionEvent event)。我认为做以下工作会使它起作用,但事实并非如此:

 @override
 public boolean onTouchEvent(MotionEvent) {
      this.clearFocus();
      anotherView.setFocusableInTouchMode(true);
      anotherView.requestFocus();
 }

显然,在我看来它只是不起作用。有人可以向我解释如何做这样的事情吗?

如果仍然有点难以理解我的问题,请考虑一个常规按钮。按下时,按钮会突出显示(聚焦),如果您将手指从按钮上移开但仍然将手指放在屏幕上,按钮将变得不聚焦,但仍可控制整个触摸事件(即使其他视图也无法聚焦)你移过他们)。我的问题是询问是否可以将此触摸焦点转移到另一个视图来处理,而无需将手指从屏幕上移开。

2 个答案:

答案 0 :(得分:2)

尝试下面的代码可能会起作用

button1.setOnFocusChangeListener(new OnFocusChangeListener()
{           
    @Override
    public void onFocusChange(View arg0, boolean hasFocus)
    {
        if(hasFocus)                
            button2.requestFocus();             
    }
});

答案 1 :(得分:0)

我解决这个问题的方法是拥有一个单独的视图“harness”,其唯一目的是将触摸信息传递给其他类,然后他们将进行处理。请注意,ViewA和B实际上不必是视图并扩展视图类。它不是一个理想的解决方案,但我不认为使用当前的Android框架(ICS / JB)解决这个问题是可能的。

class ViewHarness extends View{

    public boolean onTouch(MotionEvent event){
    if(ViewA is selected)
        ViewA.onTouch(event);
    else
        ViewB.onTouch(event);
}