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() 方法来启动动画。

    评论

报告相同问题?

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型