1

アプリケーションのページ間でスワイプを実装しようとしています。現在、1 つのアクティビティからすべてにアクセスする 5 つの XML レイアウト ファイルがあります。下部には各レイアウトを表す 5 つのボタンがあり、押すと対応する XML レイアウトに切り替わります。

を使用してスワイプを実装しようとしましOnGestureListenerたが、思いどおりに動作しません。Titleスワイプを機能させるには、ビューをスワイプする必要があります。レイアウトに表示されているいずれかのビューをスワイプしても機能しません。

私は探し始めて、GestureOverlayView私が欲しいものと思われる を見つけました。ただし、私が見つけたすべての実装で問題が発生しました。チュートリアル同様の SO の質問

これは私がこれまでに持っているコードです:

public class Monitor extends Activity implements android.view.GestureDetector.OnGestureListener, OnGesturePerformedListener {
    private GestureDetector gestureScanner;
    private GestureOverlayView gestures;
    private static final int SWIPE_MIN_DISTANCE = 50;
    private static final int SWIPE_THRESHOLD_VELOCITY = 50;
    private GestureLibrary gestureLib;

    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        gestures = new GestureOverlayView(this);
        View inflate = getLayoutInflater().inflate(R.layout.main, null);
        gestures.addView(inflate);
        gestures.addOnGesturePerformedListener(this);
        gestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures); // Error here
        if (!gestureLib.load()) {
           finish();
         }
        setContentView(gestures);
}

行でエラーが発生しますgestureLib = GestureLibraries.fromRawResource();。エラーはraw cannot be resolved or is not a field.です。rawディレクトリにフォルダがありません/project-name/res/。何か案は?これを行う別の方法はありますか?

これが、タイトル バーでのみ機能するスワイプ機能を最初に実装した方法です。

public class Monitor extends Activity implements android.view.GestureDetector.OnGestureListener {
    private GestureDetector gestureScanner;
    private static final int SWIPE_MIN_DISTANCE = 50;
    private static final int SWIPE_THRESHOLD_VELOCITY = 50;
    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        gestureScanner = new GestureDetector(this);
        setContentView( R.layout.monitor );
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.i( "TouchEvent", "Here" );
        return gestureScanner.onTouchEvent(event);
    }

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
        if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
            && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY
            ) {
            Log.i( "OnFling", "Right" );
            //ur code goes here.            
            if( getTitle().equals( getString( R.string.main_analogs ) ) ) {
                setContentView( R.layout.monitor );
                setTitle( R.string.main_monitor );
                buildButtons();
                if( hasRead ) {
                    updateMonitorForm();
                }
            }
        }
        /* on scroll to the previous page  */
        else if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
            && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY
            ) {
            Log.i( "OnFling", "Left" );
            //Ur code goes here
            if( getTitle().equals( getString( R.string.main_monitor ) ) ) {
                setContentView( R.layout.analogs );
                setTitle( R.string.main_analogs );
            buildButtons();
                if( hasRead ) {
                    updateMonitorForm();
                }
            }
        }
        return false;
}
4

1 に答える 1

2

アプリケーションのページ間でスワイプを実装しようとしています。現在、1 つのアクティビティからすべてにアクセスする 5 つの XML レイアウト ファイルがあります。下部には各レイアウトを表す 5 つのボタンがあり、押すと対応する XML レイアウトに切り替わります。

これは、ウィジェットの理想的なシナリオですViewPager(他の重要な詳細を追加するのを忘れない限り)。を手動でスワイプすることができViewPagerます (そのため、自分でタッチ イベントを処理する必要はありません)。またViewPagersetCurrentItemメソッド (Buttonsパーツ) を使用して現在のページを設定することもできます。

あなたのシナリオに基づいて私の小さな例を作りました。サンプルは一目瞭然で、ここで見つけることができます。

于 2013-01-07T17:59:12.270 に答える