ViewFlipper с одним ребенком (LinearLayout) - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть ViewFlipper, который содержит только один дочерний элемент (линейный слой), проблема, с которой я сталкиваюсь, заключается в том, что когда я переключаю представления, он работает хорошо, отображает следующий вид и так далее.Но анимация не идет гладко, я имею в виду, что текущий экран движется, а следующий появляется!В этом случае текущий экран удаляется, а следующий скользит.

Как сделать так, чтобы текущий экран сдвигался, и позволял следующему скользить, пока у него есть один дочерний элемент в ViewFlipper?Я искал повсюду, ничего не могу найти!

xml код:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout">
<ViewFlipper
    android:id="@+id/flipper"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ListView
            android:id="@+id/dateView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="2"
        />
        <ListView
            android:id="@+id/myListView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
        />  
    </LinearLayout>
</ViewFlipper>

код Android:

case MotionEvent.ACTION_UP:{
            currentX = event.getX();
            if (Math.abs(currentX - downXValue) >= v.getWidth()/5){
                if(currentX < downXValue){
                    calendar.add(Calendar.DAY_OF_MONTH, 1);
                    dateAdapter.notifyDataSetChanged();
                    todoAdapter.clear();
                    todoAdapter.notifyDataSetChanged();
                    vf.setInAnimation(v.getContext(), R.anim.push_left_in);
                    vf.setOutAnimation(v.getContext(), R.anim.push_left_out);
                    vf.showPrevious();
                }
                else{
                    calendar.add(Calendar.DAY_OF_MONTH, -1);
                    dateAdapter.notifyDataSetChanged();
                    todoAdapter.clear();
                    todoAdapter.notifyDataSetChanged();
                    vf.setInAnimation(v.getContext(), R.anim.push_right_in);
                    vf.setOutAnimation(v.getContext(), R.anim.push_right_out);   
                    vf.showNext();
                }   
            }
            break;
        }

С наилучшими пожеланиями!

1 Ответ

0 голосов
/ 30 сентября 2011

Используйте взамен ViewSwitcher. Реализуйте ViewSwitcher.ViewFactory для обеспечения внутреннего вида (вы можете использовать LayoutInflater с макетом XML), установите его с помощью ViewSwitcher.setFactory и используйте ViewSwitcher.getNextView и View.findViewById, чтобы найти и настроить ваши компоненты соответственно.

A ViewSwitcher также является подклассом ViewAnimator, поэтому вы можете установить анимацию входа / выхода и использовать showNext и showPrevious, как вы уже знакомы.

...