开发者

ViewFlipper With One Child (LinearLayout)

I' have a ViewFlipper, which contains one child only (a linearlayout), the problem I have is when I switch view's, it goes well and displays the next view and so on. But the animation doesn't goes smoothly, by that I mean that the current screen moves while next one shows up! In this case, the current screen gets removed and the next one slides in.

How can I make the current screen to slide away, and let the next one slide in while have one child in the ViewFlipper? I've been looking all over, can't find anything!

xml code:

<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 code:

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);
                    dateA开发者_C百科dapter.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;
        }

Best regards!


Use a ViewSwitcher instead. Implement a ViewSwitcher.ViewFactory to provide the inside view (you can use a LayoutInflater with a layout xml), set it using ViewSwitcher.setFactory and use ViewSwitcher.getNextView and View.findViewById to find and set your components accordingly.

A ViewSwitcher is also a subclass of ViewAnimator so you can set the in/out animations and use showNext and showPrevious as you are already familiar with.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜