欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android封装带动画效果的引导页面Demo

程序员文章站 2022-02-14 11:20:17
...

分享一个Android APP的引导页的Demo、一共有3个Fragment页面组合而来的、同时提供了滑动功能、分别都对应有不同的动画、一共有3个动画、话不多说、可直接看Demo效果图、相信你一定会下载使用的

Android封装带动画效果的引导页面Demo



重写ViewPager 、主要做一个切换背景的功能

public class GuideViewPager extends ViewPager {
    private Bitmap bg;
    private Paint b = new Paint(1);
    
    public GuideViewPager(Context context) {
        super(context);
    }

    public GuideViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        if (this.bg != null) {
            int width = this.bg.getWidth();
            int height = this.bg.getHeight();
            int count = getAdapter().getCount();
            int x = getScrollX();
            // 子View中背景图片需要显示的宽度,放大背景图或缩小背景图。
            int n = height * getWidth() / getHeight();
            
            /**
             * (width - n) / (count - 1)表示除去显示第一个ViewPager页面用去的背景宽度,剩余的ViewPager需要显示的背景图片的宽度。
             * getWidth()等于ViewPager一个页面的宽度,即手机屏幕宽度。在该计算中可以理解为滑动一个ViewPager页面需要滑动的像素值。
             * ((width - n) / (count - 1)) /getWidth()也就表示ViewPager滑动一个像素时,背景图片滑动的宽度。
             * x * ((width - n) / (count - 1)) /  getWidth()也就表示ViewPager滑动x个像素时,背景图片滑动的宽度。
             * 背景图片滑动的宽度的宽度可以理解为背景图片滑动到达的位置。
             */
            int w = x * ((width - n) / (count - 1)) / getWidth();
            canvas.drawBitmap(this.bg, new Rect(w, 0, n   w, height), new Rect( x, 0, x   getWidth(), getHeight()), this.b);
        }
        super.dispatchDraw(canvas);
    }
    
    public void setBackGroud(Bitmap paramBitmap) {
        this.bg = paramBitmap;
        this.b.setFilterBitmap(true);
    }
}


第一个界面动画

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    View rooView=inflater.inflate(R.layout.fragment_reward_launcher, null);
    ivGold=(ImageView) rooView.findViewById(R.id.iv_gold);
    ivReward=(ImageView) rooView.findViewById(R.id.iv_reward);
    
    //获取硬币的高度
    goldBitmap=BitmapFactory.decodeResource(getActivity().getResources(),R.drawable.icon_gold);
    startAnimation();
    return rooView;
}


动画实现代码

public void startAnimation(){
    started=true;
    
    //向下移动动画 硬币的高度*2 80   
    TranslateAnimation translateAnimation=new TranslateAnimation(0,0,0,goldBitmap.getHeight()*2 80);
    translateAnimation.setDuration(500);
    translateAnimation.setFillAfter(true);
    
    ivGold.startAnimation(translateAnimation);
    translateAnimation.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {}
        @Override
        public void onAnimationEnd(Animation animation){
            if(started){
                ivReward.setVisibility(View.VISIBLE);
                //硬币移动动画结束开启缩放动画
                Animation anim=AnimationUtils.loadAnimation(getActivity(),R.anim.reward_launcher);  
                ivReward.startAnimation(anim);
                anim.setAnimationListener(new AnimationListener(){
                    @Override  
                    public void onAnimationStart(Animation animation) {}  
                    @Override  
                    public void onAnimationRepeat(Animation animation) {}  
                    @Override  
                    public void onAnimationEnd(Animation animation) {
                            //缩放动画结束 开启改变透明度动画
                            AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
                            alphaAnimation.setDuration(1000);
                            ivReward.startAnimation(alphaAnimation);
                            alphaAnimation.setAnimationListener(new AnimationListener() {
                                @Override
                                public void onAnimationStart(Animation animation) {}
                                @Override
                                public void onAnimationRepeat(Animation animation) {}
                                @Override
                                public void onAnimationEnd(Animation animation) {
                                    //透明度动画结束隐藏图片
                                    ivReward.setVisibility(View.GONE);
                                }
                        });
                    }
                });
            }
        }
        @Override
        public void onAnimationRepeat(Animation animation) {}
    });
}


android引导页动画效果源代码下载链接: android引导页面动画 密码: 8mxq

另外BarCode也是有Java和Php相关的Api的、本文只分享一Jquery的Api、如果有另外的需求大家可以访问JQuery BarCode官网