如果你想要两种布局,一种是活的,一种是死的,你应该在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"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView"
android:layout_gravity="center_horizontal" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/live"
android:layout_weight="1"
android:background="@color/background_floating_material_dark">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/dead"
android:layout_weight="1">
</LinearLayout>
我们覆盖该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;
}
};
因此,在这种特殊情况下,我们可以检查触摸何时发生在“活动区域”下,然后简单地忽略它或实现我们想要的任何行为。
希望这会有所帮助。问候何塞