使用View模拟Android ViewPager动画

时间:2013-10-07 15:34:23

标签: android animation android-viewpager

我想模拟视图寻呼机的动画,用于更改背景颜色,但想法是让视图(或更多)始终保持在背景前面(即使在切换时)。 任何建议都会很高兴听到。

编辑:这是我想要实现的一个例子: http://www.youtube.com/watch?v=mB7GmfMxLvY

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。您可以创建具有不同背景的视图,然后使用动画来获得所需的效果。但是,由于您提到了ViewPager,如果这是您需要的...更简单的解决方案是使用相对布局并在视图寻呼机顶部覆盖其他视图。

看看这里:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/viewpager"
        android:layout_alignParentRight="false"/>
    <!-- other views go here -->
    <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/ic_launcher"/>
</RelativeLayout>

然后使用不同的背景颜色为视图寻呼机分配视图。 (注意:在短时间内编写代码来解释解决方案)

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        colors = new ArrayList<Integer>();
        colors.add(Color.RED);
        colors.add(Color.BLACK);
        colors.add(Color.BLUE);
        colors.add(Color.GREEN);
        colors.add(Color.YELLOW);

        mViewPager = (ViewPager)findViewById(R.id.viewpager);
        mPageAdapter = new MyPageAdapter();
        mViewPager.setAdapter(mPageAdapter);
        mPageAdapter.notifyDataSetChanged();
    }

    private MyPageAdapter mPageAdapter;
    private ViewPager mViewPager;
    private List<Integer> colors;

    class MyPageAdapter extends PagerAdapter {


        @Override
        public int getCount() {
            return colors.size();
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            RelativeLayout view = new RelativeLayout(getApplicationContext());
            view.setBackgroundColor(colors.get(position));
            ((ViewPager) mViewPager).addView(view, 0);
            return view;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object view) {
            ((ViewPager) mViewPager).removeView((RelativeLayout) view);
        }

        @Override
        public boolean isViewFromObject(View view, Object o) {
            return view == ((RelativeLayout) o);
        }

    }

}

因此,您可以在不编写任何额外代码的情况下实现视图寻呼机的所有属性(手势,幻灯片效果等)。