首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动画绘图不能正确调整大小

动画绘图不能正确调整大小
EN

Stack Overflow用户
提问于 2022-09-17 13:15:02
回答 1查看 32关注 0票数 0

我有一只会走路的恐龙,我用一个可绘制的动画来制作它。

代码语言:javascript
复制
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/dino1" android:duration="@integer/dino_dino" />
    <item android:drawable="@drawable/dino2" android:duration="@integer/dino_dino" />
    <item android:drawable="@drawable/dino3" android:duration="@integer/dino_dino" />
</animation-list>

我想建立它的宽度使用指南和计算它的高度自动。我已经习惯了scaleType为我做正常的照片。如下所示:

代码语言:javascript
复制
<ImageView
    android:id="@+id/dino"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    android:layout_marginBottom="6dp"
    app:layout_constraintLeft_toLeftOf="@+id/guidelineDinoStart"
    app:layout_constraintRight_toRightOf="@+id/guidelineDinoEnd"
    app:layout_constraintBottom_toBottomOf="parent" />

实际上,如果我在上面的ImageView定义中添加以下一行(即将其src设置为动画中的第一个框架):

代码语言:javascript
复制
android:src="@drawable/dino_1"

然后我得到了适当比例的图像:

但是,如果我以代码的形式执行以下操作(并将src行从ImageView定义中移除),则图像将显示拉伸:

代码语言:javascript
复制
_dino = view.findViewById(R.id.dino);

_dino.setBackgroundResource(R.drawable.dino_anim);

AnimationDrawable anim = (AnimationDrawable) _dino.getBackground();

_dino.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        anim.start();
    }
});

如果我注释掉_dino.setBackgroundResource(R.drawable.dino_anim);并将ImageView定义的src设置为动画:

代码语言:javascript
复制
android:src="@drawable/dino_anim"

然后,当我点击(尝试启动)动画时,应用程序就崩溃了,它说:

代码语言:javascript
复制
Attempt to invoke virtual method 'void android.graphics.drawable.AnimationDrawable.start()' on a null object reference

如果ImageView只是一张静止的图片,我如何将它设置为具有适当比例的AnimationDrawable (使用宽度而不是高度的准则)呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-17 15:31:48

您需要使用background src来表示ImageView。我建议使用src,因为资源将以原来的高宽比显示。

使用ImageView的资源

只需设置资源:

代码语言:javascript
复制
android:src="@drawable/dino_anim"

在代码中,从getDrawable()而不是getBackground()获取getDrawable()引用

代码语言:javascript
复制
AnimationDrawable anim = (AnimationDrawable) _dino.getDrawable();

为什么坠机?

崩溃是由anim.start();引起的,因为当您注释掉_dino.setBackgroundResource(R.drawable.dino_anim);时,没有设置imageView的背景。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73755174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档