BAMBAM 2013-10-06 05:43 采纳率: 0%
浏览 3748

求助!Android动画,能不能不用setBackgroundResource,直接用setImageResource?

标准的Drawable动画,是用imageView.setBackgroundResource设置动画文件,然后通过(AnimationDrawable)imageView.getBackground()获取动画句柄,start()启动动画。

我现在做的程序,图片分静态模式和动画模式两种,静态的时候是通过setImageResource设置图片的,如果动画再使用setBackgroundResource设置,两个图片会出现重叠,所以尝试直接用setImageResource设置动画文件,然后通过(AnimationDrawable)imageView.getDrawable()获取动画句柄。

经过测试,这样是可行的,但是很想知道这两者的区别(毕竟我是非常规做法),会不会带来额外的消耗或者隐患?例如background动画是在子线程内运行,而image动画是在主线程内运行?

求了解Android代码和机制的大拿解惑,谢谢;)

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-25 17:59
    关注

    该回答引用ChatGPT

    在 Android 中,ImageView 的 setBackgroundResource() 和 setImageResource() 方法都可以用来设置一个图片资源。但是,它们的区别在于设置的内容。


    setBackgroundResource() 方法设置的是一个 Drawable 对象,这个 Drawable 对象会被设置为 ImageView 的背景,而且 Drawable 对象可以是动画文件,比如 AnimationDrawable,因为 View 的背景可以支持动画效果。


    setImageResource() 方法设置的是一个静态图片,这个图片会被设置为 ImageView 的内容,它不支持动画效果。


    因此,如果你想要在 ImageView 中播放动画,建议使用 setBackgroundResource() 方法,因为它是专门用来支持动画效果的。如果你想要设置静态图片,就可以使用 setImageResource() 方法。


    至于你提到的直接使用 setImageResource() 方法设置动画文件,然后通过 getDrawable() 方法获取动画句柄来播放动画,虽然看起来可行,但这并不是官方推荐的做法。因为 ImageView 的 getDrawable() 方法是用来获取 ImageView 中显示的静态图片的,它并不会返回 ImageView 的背景,也就是说,通过 getDrawable() 获取到的 Drawable 对象并不能保证一定是 AnimationDrawable。


    因此,虽然你现在的做法可行,但并不建议使用,因为它可能会带来一些不确定的问题。建议还是按照官方文档的做法来使用 AnimationDrawable。如果你担心 AnimationDrawable 会在子线程中运行而导致性能问题,可以在主线程中使用 Handler 或者 runOnUiThread() 方法来启动动画。

    评论

报告相同问题?

悬赏问题

  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元