У меня еще нет вопроса.Но если вам нужно переключаться между макетами, я могу предоставить свой собственный код, как использовать функцию переключения.Сначала вы должны создать отдельные страницы ваших будущих макетов, например page_1.xml в папке res.layout.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/GreenColor"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="1"
android:textSize="120dip">
</TextView>
</LinearLayout>
После того, как вы это сделали, опишите файл main.xml , включая внешние xml-страницы:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ViewFlipper android:id="@+id/ViewFlipper01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<include android:id="@+id/libraryView1" layout="@layout/page_1" />
<include android:id="@+id/libraryView2" layout="@layout/page_2" />
<include android:id="@+id/libraryView3" layout="@layout/page_3" />
</ViewFlipper>
</RelativeLayout>
Чем не забудьте в файле классаобъявлять vf = (ViewFlipper) findViewById (R.id.ViewFlipper01);Следующим шагом вы должны переопределить OnTouchEvent, чтобы вычислить новые координаты и показать флип-анимацию:
@Override
public boolean onTouchEvent(MotionEvent touchevent) {
switch (touchevent.getAction())
{
case MotionEvent.ACTION_DOWN:
{
oldTouchValueX = touchevent.getX();
oldTouchValueY = touchevent.getY();
break;
}
case MotionEvent.ACTION_UP:
{
//if(this.searchOk==false) return false;
float currentX = touchevent.getX();
float currentY = touchevent.getY();
float deltaX = getAbs(oldTouchValueX - currentX);
float deltaY = getAbs(oldTouchValueY - currentY);
if (deltaX >= deltaY)
{
if (oldTouchValueX < currentX)
{
vf.setInAnimation(inFromLeftAnimation());
vf.setOutAnimation(outToRightAnimation());
vf.showNext();
}
if (oldTouchValueX > currentX)
{
vf.setInAnimation(inFromRightAnimation());
vf.setOutAnimation(outToLeftAnimation());
vf.showPrevious();
}
} //if deltaX
else
{
if (oldTouchValueY < currentY)
{
vf.setInAnimation(inFromUpAnimation());
vf.setOutAnimation(outToDownAnimation());
vf.showNext();
}
if (oldTouchValueY > currentY)
{
vf.setInAnimation(inFromDownAnimation());
vf.setOutAnimation(outToUpAnimation());
vf.showPrevious();
}
} //Else
break;
}
}
return false;
}
И последний - описать методы анимации, которые упоминались в OnTouchEvent:
public static Animation inFromRightAnimation()
{
Animation inFromRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, +1.0f, Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f
);
inFromRight.setDuration(350);
inFromRight.setInterpolator(new AccelerateInterpolator());
return inFromRight;
}
public static Animation outToLeftAnimation()
{
Animation outtoLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f
);
outtoLeft.setDuration(350);
outtoLeft.setInterpolator(new AccelerateInterpolator());
return outtoLeft;
}
Напишите аналогичные для остальных в / из оборотных направлениях.