我有这个代码,不会返回任何错误。然而,它并没有像它应该的那样工作。当我用两根手指向上滑动时,我试图启动一个应用程序,但什么也没发生。任何人都可以看到我的代码有什么问题吗?
public class HomeActivity extends Activity {
ImageButton phoneButton;
ImageButton contactsButton;
ImageButton messagesButton;
ImageButton cameraButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
setTitle("Apps");
loadApps();
loadListView();
addClickListener();
addphoneButtonListener();
addmessagesButtonListener();
addcontactsButtonListener();
addcameraButtonListener();
//Two-Finger Drag Gesture detection
RelativeLayout TextLoggerLayout = (RelativeLayout)findViewById(R.id.mainLayout);
TextLoggerLayout.setOnTouchListener(
new RelativeLayout.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent m) {
handleTouch(m);
return true;
}
});
}
void handleTouch(MotionEvent m){
//Number of touches
int pointerCount = m.getPointerCount();
if(pointerCount == 2){
int action = m.getActionMasked();
switch (action)
{
case MotionEvent.ACTION_DOWN:
Intent i;
PackageManager manager = getPackageManager();
try {
i = manager.getLaunchIntentForPackage("com.google.android.googlequicksearchbox");
if (i == null)
throw new PackageManager.NameNotFoundException();
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
} catch (PackageManager.NameNotFoundException e) {
}
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
}
}
else {
//do something
}
}
答案 0 :(得分:1)
尝试调试handleTouch()
以确切了解其未触发的原因。我的猜测是因为你对MotionEvent.ACTION_DOWN进行了检查,在现实世界中,两个手指同时难以完全发生。
将支票移至MotionEvent.ACTION_MOVE(无论如何您想要滑动,而不是点按),然后重试。
答案 1 :(得分:0)
MotionEvent.ACTION_DOWN
表示一根手指。 MotionEvent.ACTION_POINTER_DOWN
表示次要触摸(例如,两个手指)。
将代码移至case MotionEvent.ACTION_POINTER_DOWN:
应该可以解决您的问题。