1

我想添加一个带有多个视图的 viewflipper(比如 3 个视图,每个视图中有一个图像)。以下是我的代码:

在 xml 中:

<ViewFlipper
android:id="@+id/view_flipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="6dip" >

<!-- The child Views/Layout to flip -->


<!-- Layout 1 for 1st Screen -->

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/help1" />
</LinearLayout>


<!-- Layout 2 for 2nd Screen -->

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/help2" />
</LinearLayout>

<!-- Layout 3 for 3rd Screen -->

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/help3" />
</LinearLayout>


</ViewFlipper>

在 Java 中:

viewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);

// Method to handle touch event like left to right swap and right to left swap
public boolean onTouchEvent(MotionEvent touchevent) 
{
switch (touchevent.getAction())
{
// when user first touches the screen to swap
case MotionEvent.ACTION_DOWN: 
{
lastX = touchevent.getX();
break;
}
case MotionEvent.ACTION_UP: 
{
float currentX = touchevent.getX();

// if left to right swipe on screen
if (lastX < currentX) 
{
// If no more View/Child to flip
if (viewFlipper.getDisplayedChild() == 0)
break;

// set the required Animation type to ViewFlipper
// The Next screen will come in form Left and current Screen will go OUT from Right 
viewFlipper.setInAnimation(this, R.anim.in_from_left);
viewFlipper.setOutAnimation(this, R.anim.out_to_right);
// Show the next Screen
viewFlipper.showNext();
}

// if right to left swipe on screen
if (lastX > currentX)
{
if (viewFlipper.getDisplayedChild() == 1)
break;
// set the required Animation type to ViewFlipper
// The Next screen will come in form Right and current Screen will go OUT from Left 
viewFlipper.setInAnimation(this, R.anim.in_from_right);
viewFlipper.setOutAnimation(this, R.anim.out_to_left);
// Show The Previous Screen
viewFlipper.showPrevious();
}
break;
}
}
return false;
}

这是有效的,只是在滑​​动时视图的顺序是 1 > 3 > 2 而不是 1 > 2 > 3。由于我是 android 新手,所以我刚刚从其他地方复制了这段代码,而没有理解代码。

4

1 回答 1

2

您正在使用 ViewFlipper 在视图之间左右滑动。你真的应该使用ViewPager

话虽如此,如果您将视图ACTION_UP改为:

case MotionEvent.ACTION_UP: {
    float currentX = touchevent.getX();

    if (lastX > currentX) {
        if (viewFlipper.getDisplayedChild() == 2)
            break;

        // anim stuff here...

        viewFlipper.showNext();
    }

    if (lastX < currentX) {
        if (viewFlipper.getDisplayedChild() == 0)
            break;

        // anim stuff here...

        viewFlipper.showPrevious();
    }
    break;
}
于 2013-10-10T06:16:20.817 回答