我有一只会走路的恐龙,我用一个可绘制的动画来制作它。
<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为我做正常的照片。如下所示:
<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设置为动画中的第一个框架):
android:src="@drawable/dino_1"然后我得到了适当比例的图像:

但是,如果我以代码的形式执行以下操作(并将src行从ImageView定义中移除),则图像将显示拉伸:
_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设置为动画:
android:src="@drawable/dino_anim"然后,当我点击(尝试启动)动画时,应用程序就崩溃了,它说:
Attempt to invoke virtual method 'void android.graphics.drawable.AnimationDrawable.start()' on a null object reference如果ImageView只是一张静止的图片,我如何将它设置为具有适当比例的AnimationDrawable (使用宽度而不是高度的准则)呢?
发布于 2022-09-17 15:31:48
您需要使用background 或 src来表示ImageView。我建议使用src,因为资源将以原来的高宽比显示。
使用ImageView的资源
只需设置资源:
android:src="@drawable/dino_anim"在代码中,从getDrawable()而不是getBackground()获取getDrawable()引用
AnimationDrawable anim = (AnimationDrawable) _dino.getDrawable();为什么坠机?
崩溃是由anim.start();引起的,因为当您注释掉_dino.setBackgroundResource(R.drawable.dino_anim);时,没有设置imageView的背景。
https://stackoverflow.com/questions/73755174
复制相似问题