1

私はアンドロイド開発の初心者です。Androidのホームタブのような画面を作りたいです。ここでホームタブには2つのビューがあります。ビューを左右にドラッグすると、ビューを移動して次のビューを表示できます。Androidでこれを作成する方法を教えてください。詳細の返信またはチュートリアルのリンクが必要です。

ここにスクリーンショットがあります。これと全く同じものを作りたい。

画面 1

ここに画像の説明を入力

http://screencast.com/t/pJaLLHT74fH0

画面 2

http://screencast.com/t/QCaOlmVJv5sJ

http://screencast.com/t/QCaOlmVJv5sJ

4

2 に答える 2

1

これを実装する 1 つの方法は、ViewPager クラスを使用することです。Android の開発者サイトには、ViewPager を使用する方法の優れた説明と例があります。

http://developer.android.com/training/animation/screen-slide.html

代わりに、タブ間をスワイプしたい場合は、次の例も提供されます。

http://developer.android.com/training/implementing-navigation/lateral.html

下部の円インジケーターについては、Jake Wharton の ViewPagerIndicator ライブラリを実装できます。ダウンロードして、いくつかの例をここで見つけることができます: http://viewpagerindicator.com/

于 2013-10-25T15:38:58.350 に答える
0

view1 と view2 を実装したとします。だから、ここに私の解決策があります:

    public class FatherLayout extends RelativeLayout  implements GestureDetector.OnGestureListener, GestureDetector.OnScrollListener{
    private YourView view1 ;
    private YourView view2;

    int acitveView; // this var indicates which view is active 

    // your gesture detector here that you handle the drag events!
    private GestureDetectorCompat mDetector; 


    public FatherLayout(Context context){
        super(context);

        mDetector = new GestureDetectorCompat(this,this);
        mDetector.setOnScrollListener(this);
        this.addView(view2); // i assume that you want the view1 appears on the top  
        this.addView(view1);
        activeView = 1;
        invalidate();
    }



       /*Following YOUR GESTURE DETECTOR IMPLEMENTATION HERE*/
    @Override 
    public boolean onTouchEvent(MotionEvent event){ 
        this.mDetector.onTouchEvent(event);
        // Be sure to call the superclass implementation
        return super.onTouchEvent(event);
    }

    @Override
    public boolean onDown(MotionEvent event) { 
        Log.d(DEBUG_TAG,"onDown: " + event.toString()); 
        return false;
    }

    @Override
    public boolean onFling(MotionEvent event1, MotionEvent event2, 
            float velocityX, float velocityY) {
        Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString());
        return false;
    }

    @Override
    public void onLongPress(MotionEvent event) {
        Log.d(DEBUG_TAG, "onLongPress: " + event.toString()); 
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        // HERE YOU WILL DO ALL THE JOB.
        // FOR INSTANCE IF YOU WANT TO move the view1 you will call something like this : 
        if(activeView == 1){

            view1.setVisible(View.VISIBLE);
            view2.setVisible(View.INVISIBLE);
            activeView = 0;

        }else if(activeView == 0){
            view1.setVisible(View.INVISIBLE);
            view2.setVisible(View.VISIBLE);
            activeView = 1;
        }
        return false;
    }

    @Override
    public void onShowPress(MotionEvent event) {
        Log.d(DEBUG_TAG, "onShowPress: " + event.toString());
    }

    @Override
    public boolean onSingleTapUp(MotionEvent event) {
        Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString());
        return false;
    }

    @Override
    public boolean onDoubleTap(MotionEvent event) {
        Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString());
        return false;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent event) {
        Log.d(DEBUG_TAG, "onDoubleTapEvent: " + event.toString());
        return false;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent event) {
        Log.d(DEBUG_TAG, "onSingleTapConfirmed: " + event.toString());
        return false;
    }

}



}
于 2013-10-25T16:03:51.960 に答える