2012-08-16 54 views
3

触摸屏我需要实现触摸屏的那种死区的在我的APK使活动不接收来自这些区域的任何触摸事件。 只要多点触摸事件链接到第一次触摸,似乎并不重要。实施盲区中的Android

假设我有两个并排的侧视图的布局,并希望忽略右视图所有的触摸动作(“死”的观点是碰不得)。

对于单次触摸是微不足道。

但对于多点触摸第一触摸决定一切:如果第一个是在“死”的看法我还没有任何活动都

  1. 如果第一个在“生命”视图中,第二个在“死”视图中,则会收到多点触控事件ACTION_POINTER_DOWN_2。

目前我必须接收原始流中的所有事件并根据我的“死区”规则将其转换为另一个事件流。

但问题是:我们有什么样的有用的API的限制触摸屏事件处理,我们只需要地方?

P.S.我需要所有这些以在玩游戏时过滤屏幕边上的意外触摸。

谢谢。

回答

1

如果你想要两个布局,一个活的和一个死一个,你应该添加自己View.OnTouchListener他们每个人。

我做了一个例子,这里是活动:

public class MainActivity extends ActionBarActivity { 
TextView text; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    LinearLayout linearLayoutDead = (LinearLayout) findViewById(R.id.dead); 
    linearLayoutDead.setOnTouchListener(onTouchDeadListener); 
    LinearLayout linearLayoutLive = (LinearLayout) findViewById(R.id.live); 
    linearLayoutLive.setOnTouchListener(onTouchLiveListener); 

    text = (TextView) findViewById(R.id.textView); 
} 

private View.OnTouchListener onTouchDeadListener = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     text.setText(motionEvent.toString()); 
     return false; 
    } 

}; 

private View.OnTouchListener onTouchLiveListener = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     text.setText(motionEvent.toString()); 
     return true; 
    } 

}; 

}

而且布局:

<?xml version="1.0" encoding="utf-8"?> 

我们覆盖OnTouch方法,你会发现,当我们在“死区”单个或多个触摸,我们得到的初步反应,但没有进一步。 但是,当我们在“活区”中进行第一次触摸并且在死区中进行第二次触摸时,情况如何?

对于这种情况,你应该添加一个新的条件,您OnTouch方法,像这样:

private View.OnTouchListener onTouchLiveListener = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     if(motionEvent.getPointerCount()>1){ 
      if(motionEvent.getY(1) > someNumber){ 
       //Case when we touch the dead zone, TODO do some ... 
      } 
     } 
     text.setText(motionEvent.toString()); 
     return true; 
    } 

}; 

因此,在这种特殊情况下,我们可以检查当触摸“活区”下发生,根本不理会它或实现我们想要的任何行为。

希望这可能会有所帮助。 关注 何塞

+0

对不起这是我早期的Android尝试。我不再与这个项目有关(实际上近两年)。我记得我实施了一种相同的解决方案。我的触摸屏处理过滤掉了区域内的水龙头,并移除了额外的坐标。在成功的过程中,我成功地过滤了他们想要的东西,但项目本身早已完成。 – OGP 2015-02-24 13:42:25