AnimationDrawable监听播放结束及ImageSwitcher动画图片切换,带动画

简介: //java代码动态加载动画 或者res/anim/中加载

//java代码动态加载动画 或者res/anim/中加载

private void setRepaymentDate(NewProductInfoBean productInfo) {
    ArrayList<Integer> res = new ArrayList<>();
    res.add(R.mipmap.day_left_1);
    res.add(R.mipmap.day_left_2);
    res.add(R.mipmap.day_left_3);
    res.add(R.mipmap.day_left_4);
    res.add(R.mipmap.day_left_5);
    res.add(R.mipmap.day_left_6);
    res.add(R.mipmap.day_left_7);
    res.add(R.mipmap.day_left_8);
    res.add(R.mipmap.day_left_9);
    res.add(R.mipmap.day_left_10);
    res.add(R.mipmap.day_left_11);
    res.add(R.mipmap.day_left_12);
    res.add(R.mipmap.day_left_13);
    res.add(R.mipmap.day_left_14);
    res.add(R.mipmap.over_due);
    mllOverdueDay.setVisibility(View.GONE);
    ad = new AnimationDrawable();
    isOverdue = false;
    if (productInfo.getData().getOrderDetail().getStatus() == 17)//逾期
    {
        handler.removeMessages(100);
        mllOverdue.setVisibility(View.VISIBLE);
        for (int i = 0; i < res.size(); i++) {
            ad.addFrame(getResources().getDrawable(res.get(i)), 100);
        }
        ad.setOneShot(true);
        mimRepaymentProgress.setBackground(ad);
        ad.start();
        handler.sendEmptyMessageDelayed(100, 1500);
        isOverdue = true;
    } else {
        mtvRepaymentStatement.setText(R.string.home_prepayment);
        mllOverdue.setVisibility(View.GONE);
        for (int i = 0; i < 15 - productInfo.getData().getOrderDetail().getRepayDay(); i++) {
            ad.addFrame(getResources().getDrawable(res.get(i)), 100);
        }
        ad.setOneShot(true);
        mimRepaymentProgress.setBackground(ad);
        ad.start();
    }
}


Handler handler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
            case 100:
                AnimationSet animationSet = new AnimationSet(true);
                ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f, 1, 0.5f, 1,
                        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
                scaleAnimation.setDuration(100);
                animationSet.addAnimation(scaleAnimation);
                //启动动画
                mllOverdueDay.startAnimation(animationSet);
                mllOverdueDay.setVisibility(View.VISIBLE);
                break;
        }
        return false;
    }
});


当启动其他Fragment,Activity并未对本界面进行销毁时AnimationDrawable会停止(回到第一张图片),


返回本界面是可以再次ad.start();//启动动画handler.sendEmptyMessageDelayed(100, 1400);//1400整个动画所需时间,(如有多次启动动画的代码需要handler.removeMessages(100);


<ImageSwitcher
    android:id="@+id/image_SwitcherTop"
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="80dp" />


imgIds = new int[]{R.mipmap.icon_splash_top_1, R.mipmap.icon_splash_top_2,
        R.mipmap.icon_splash_top_3};
imageSwitcherTop.setFactory(this);
imageSwitcherTop.setImageResource(imgIds[currentPosition % imgIds.length]);


extends BaseActivity implements ViewSwitcher.ViewFactory
@Override
public View makeView() {
    return new ImageView(this);
}


左右滑动事件监听(可以添加动画效果)


@Override
public boolean onTouchEvent(MotionEvent event) {
    //继承了Activity的onTouchEvent方法,直接监听点击事件
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        //当手指按下的时候
        downx = event.getX();
    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        //当手指离开的时候
        upx = event.getX();
        if(firstTime){
            if (downx > upx && currentPosition < imgIds.length - 1) {
                currentPosition++;
                imageSwitcherTop.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.right_in));
                imageSwitcherTop.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.lift_out));
                imageSwitcherTop.setImageResource(imgIds[currentPosition % imgIds.length]);
            } else if (upx > downx && currentPosition > 0) {
                currentPosition--;
                imageSwitcherTop.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.left_in));
                imageSwitcherTop.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.right_out));
                imageSwitcherTop.setImageResource(imgIds[currentPosition % imgIds.length]);
            }
            tvTrynow.setVisibility(currentPosition == (imgIds.length - 1) ? View.VISIBLE : View.GONE);
            setImageBackground(currentPosition);
        }
    }
    return super.onTouchEvent(event);
}
目录
打赏
0
0
0
0
4
分享
相关文章
监听手机屏幕旋转 横屏 竖屏 dome
监听手机屏幕旋转 横屏 竖屏 dome
|
5月前
ThreeJs手动控制动画播放与暂停
这篇文章介绍了如何在Three.js中手动控制动画的播放与暂停,包括设置动画混合器、监听按键事件以调整动画状态和速度的方法。
148 0
ThreeJs手动控制动画播放与暂停
|
9月前
|
【unity小技巧】最简单的FPS游戏准心跳动动画控制
【unity小技巧】最简单的FPS游戏准心跳动动画控制
82 0
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
1271 1
水波涟漪,使用SwiftUI做一个仿iPhone隔空投送动画~
水波涟漪,使用SwiftUI做一个仿iPhone隔空投送动画~
213 0
制作移动端整页滚动动画
制作移动端整页滚动动画
131 0
实现场景切换的时候淡入淡出的效果(Unity3D)
在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了今天就实现一个场景切换的时候淡入淡出的效果。剩下的场景异步加载还有中间过渡场景有时间再写。
kanzi如何录制动画制作跳动的小球
实现效果如下   1)导入素材,建动画。 在library中,右键Animations > Animation Clips > Animation Clip,打开Animation Clip Editor。
1400 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等