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);
}
相关文章
|
存储 监控 前端开发
前端文件流、切片下载和上传:优化文件传输效率与用户体验 【最全】
文件传输是一个常见的需求。对于大文件的下载和上传,直接使用传统的方式可能会遇到性能和用户体验方面的问题。幸运的是,前端技术提供了一些高效的解决方案:文件流操作和切片下载与上传。本文将深入探讨这些技术,帮助你理解它们的原理和实现方法,以优化文件传输效率和提升用户体验。
前端文件流、切片下载和上传:优化文件传输效率与用户体验 【最全】
|
编解码 Android开发
Android 使用VideoView播放本地视频详解
Android 使用VideoView播放本地视频详解
864 2
|
存储 Java 编译器
Go函数解密:底层工作原理
Go函数解密:底层工作原理
307 0
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
993 4
|
7月前
|
安全 Linux Shell
CentOS恢复或重置遗忘的root用户密码的方法
至此,整个手术过程完成。没有繁复的迷魂阵,也无需烧香拜佛,就这样直截了当,你已经成功将被遗忘的密码变成了新的秘密。就像你的影子随形,但却更加隐秘安全。这不仅限于CentOS,其实许多Linux系统对于这样的技巧也会乖乖听话。这样的流程就像变魔术一样,让你重新掌握了“开关命运”的钥匙。
1578 5
|
10月前
|
人工智能 算法 JavaScript
DeepSeek横空出世,真的拯救了算力焦虑吗?
DeepSeek的突破无疑将竞争维度从“硬碰硬”的算力堆砌转向“巧实力”的算法创新,为后发者开辟了新赛道。然而,硅谷巨头的天价投资和持续膨胀的算力需求表明:算法优化是“节流”,而算力基建才是“开源”。在可见的未来,两者的螺旋式博弈仍将定义AI时代的权力格局。 或许,真正的赢家将是那些“左手握算法利刃,右手筑算力高墙”的玩家——毕竟,汽油和发动机,从不是非此即彼的选择。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
编解码 前端开发 Android开发
Android经典实战之TextureView原理和高级用法
本文介绍了 `TextureView` 的原理和特点,包括其硬件加速渲染的优势及与其他视图叠加使用的灵活性,并提供了视频播放和自定义绘制的示例代码。通过合理管理生命周期和资源,`TextureView` 可实现高效流畅的图形和视频渲染。
949 12
|
IDE 开发工具 Python
Python自动化操作word--批量替换word文档中的文字
Python自动化操作word--批量替换word文档中的文字
838 0
|
开发工具 iOS开发
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
773 2
|
Java 开发工具 Android开发
Android Studio 导出JavaDoc文档
Android Studio 导出JavaDoc文档
568 0

热门文章

最新文章