博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义viewpager
阅读量:7030 次
发布时间:2019-06-28

本文共 4679 字,大约阅读时间需要 15 分钟。

hot3.png

上一篇viewpager的切换动画中我们看到需要修改viewpager的源码,这里我们为了方便,并且不会出现版本不兼容的问题,所以自定义一个viewpager

MyViewPager.class(这里是用了缩放和移动的动画,通过map存储梯度值)

/** *  */package com.test.sildingmenu.view;import java.util.HashMap;import java.util.Map;import com.nineoldandroids.view.ViewHelper;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.View;/** * @author wanggenping * */public class MyViewPager extends ViewPager{    private View mRight;    private View mLeft;        private float mTrans;    private float mScale;        private static final float MIN_SCALE = 0.5f;    private Map
 mChildren = new HashMap
();    /**     * @param context     * @param attrs     */    public MyViewPager(Context context, AttributeSet attrs) {        super(context, attrs);            }            @Override    protected void onPageScrolled(int position, float offset, int offsetPixels) {                mLeft = mChildren.get(position);        mRight = mChildren.get(position + 1);        animStack(mLeft,mRight,offset,offsetPixels);        super.onPageScrolled(position, offset, offsetPixels);    }        /**     * @param left     * @param right     * @param offset     * @param offsetPixels     */    private void animStack(View left, View right, float offset,            int offsetPixels) {        if(right != null){            //offset 0 ~ 1            mScale = (1-MIN_SCALE)*offset + MIN_SCALE;            mTrans = -getWidth() - getPageMargin() + offsetPixels;            ViewHelper.setScaleX(right, mScale);            ViewHelper.setScaleY(right, mScale);            ViewHelper.setTranslationX(right, mTrans);        }                if(left != null){            left.bringToFront();        }            }    public void setViewForPosition(View view,int position){        mChildren.put(position, view);    }        public void removeViewFromPosition(Integer position){        mChildren.remove(position);    }        }

ViewPagerActivity.class

/** *  */package com.test.sildingmenu;import java.util.ArrayList;import java.util.List;import com.test.sildingmenu.view.CustomViewPager;import com.test.sildingmenu.view.DepthPageTransformer;import com.test.sildingmenu.view.MyViewPager;import com.test.sildingmenu.view.RotateDownPagerTransformer;import com.test.sildingmenu.view.ZoomOutPageTransformer;import android.app.Activity;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.ImageView.ScaleType;/** * @author wanggenping * */public class ViewPagerActivity extends Activity{    private MyViewPager viewPager;    private int[] images = new int[]{R.drawable.guide_image1,R.drawable.guide_image2,R.drawable.guide_image3};    private List
 imageList = new ArrayList
();        @Override    protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);        setContentView(R.layout.activity_view_pager2);        viewPager = (MyViewPager) findViewById(R.id.activity_view_pager_viewpager);        //为viewpager添加动画效果//        viewPager.setPageTransformer(true, new DepthPageTransformer());//        viewPager.setPageTransformer(true, new ZoomOutPageTransformer());//        viewPager.setPageTransformer(true, new RotateDownPagerTransformer());        viewPager.setAdapter(new PagerAdapter() {                        @Override            public boolean isViewFromObject(View arg0, Object arg1) {                                return arg0.equals(arg1);            }                        @Override            public int getCount() {                                return images.length;            }                                    @Override            public Object instantiateItem(ViewGroup container, int position) {                ImageView imageView = new ImageView(ViewPagerActivity.this);                imageView.setImageResource(images[position]);                imageView.setScaleType(ScaleType.CENTER_CROP);//防止变形                container.addView(imageView);                imageList.add(imageView);                viewPager.setViewForPosition(imageView, position);                return imageView;            }            @Override            public void destroyItem(ViewGroup container, int position,                    Object object) {                                container.removeView(imageList.get(position));                viewPager.removeViewFromPosition(position);            }        });    }}

activity_view_pager2.xml

    

转载于:https://my.oschina.net/meetthebetteryour/blog/612534

你可能感兴趣的文章
关于JQuery Class选择器的一点
查看>>
POJ3264 Balanced Lineup
查看>>
redis-cli 连接远程服务器
查看>>
emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
查看>>
sublime 之 vitage/emmet
查看>>
代码管理(四)SVN和Git对比
查看>>
python - hadoop,mapreduce demo
查看>>
mongodb常见管理命令
查看>>
1.7 以函数对象取代函数
查看>>
Vue过渡效果之JS过渡
查看>>
Android项目实战(三):实现第一次进入软件的引导页
查看>>
Web Service基础——基础概念
查看>>
Linux2.4文件系统中vfsmount、安装点的dentry、设备的dentry之间的关系【转】
查看>>
POJ 1201 Intervals
查看>>
JAVA訪问URL
查看>>
APP接口基础学习一
查看>>
设计模式 策略模式 以角色游戏为背景
查看>>
【转】CSS和SVG中的剪切——clip-path属性和<clipPath>元素
查看>>
【C语言入门教程】5.4 递归
查看>>
UVALive 6915 Leveling Ground 倍增RMQ
查看>>