Android手势不起作用

时间:2013-04-20 13:03:50

标签: java android gesture

这是我的主要Java文件,我还会包含我的XML文件,问题只是应用程序什么都不做,我需要刷它来更改页面newPage()但没有任何作用。我有一个隐藏的按钮,但是这个方法对于我正在尝试使用的应用程序来说还不够顺畅。

 package com.example.cardtrick;

 import android.os.Bundle;
 import android.view.MotionEvent;
 import android.view.View;
 import android.widget.Button;
 import android.app.Activity;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.view.GestureDetector.OnGestureListener;
 import android.view.GestureDetector;


 public class Trick extends Activity implements OnGestureListener
{

private GestureDetector gestureScanner;
Button testButton;

@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_trick);


    getRequestedOrientation();
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

    setGestureScanner(new GestureDetector(this));

    setUp();

}


public void setUp()
{
    testButton = (Button) findViewById(R.id.btnHidden);     
    testButton.setText("");     
    testButton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View V)
        {   
            newPage();  
        }

    });
}
public void newPage()
{       
    Intent myIntent = new Intent(getApplicationContext(), Trick2.class);
    startActivity(myIntent);
}

@Override
public boolean onDown(MotionEvent e) 
{
    // TODO Auto-generated method stub
    newPage();
    return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
{
    // TODO Auto-generated method stub
    newPage();
    return false;
}

@Override
public void onLongPress(MotionEvent e) 
{
    // TODO Auto-generated method stub
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 
{
    // TODO Auto-generated method stub
    return false;
}

@Override
public void onShowPress(MotionEvent e) 
{
    // TODO Auto-generated method stub
}

@Override
public boolean onSingleTapUp(MotionEvent e) 
{
    // TODO Auto-generated method stub
    newPage();
    return false;
}

/**
 * @return the gestureScanner
 */
public GestureDetector getGestureScanner() {
    return gestureScanner;
}

/**
 * @param gestureScanner the gestureScanner to set
 */
public void setGestureScanner(GestureDetector gestureScanner) {
    this.gestureScanner = gestureScanner;
}


}





<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:screenOrientation="portrait"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/backnorepeat"
android:gravity="center_horizontal"
tools:context=".Trick" >


<Button
    android:id="@+id/btnHidden"
    style="@style/FullscreenActionBarStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:contentDescription="@string/card"
    android:src="@drawable/diamonds" />



</FrameLayout>

1 个答案:

答案 0 :(得分:1)

您需要将OnTouchListener添加到活动中的所有视图,以便捕获它们上的触摸事件。 将此代码添加到您的onCreate

    View.OnTouchListener gestureListener = new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            return gestureScanner.onTouchEvent(event);
        }
    };
    ImageView iview = (ImageView) findViewById(R.id.imageView1);
    iview.setOnTouchListener(gestureListener);

现在你可以在onFling()中捕获事件了。接下来,您必须确定滑动,请参阅答案以了解如何:https://stackoverflow.com/a/938657/2203164

编辑: 为了捕获onFling(),你必须在onDown()中return true