Java 安卓没有';不显示gif
我是android开发的新手,所以我有以下问题。我试图通过以下代码显示gif green.gif(res/drawable xxhdpi/): GIVIEW类:Java 安卓没有';不显示gif,java,android,gif,Java,Android,Gif,我是android开发的新手,所以我有以下问题。我试图通过以下代码显示gif green.gif(res/drawable xxhdpi/): GIVIEW类: package ru.rkarasev.miptrain; import java.io.InputStream; import android.content.Context; import android.graphics.Canvas; import android.graphics.Movie; import android
package ru.rkarasev.miptrain;
import java.io.InputStream;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View;
public class GIFView extends View {
private Movie movie;
private InputStream is;
private long moviestart;
public GIFView(Context context) {
super(context);
is = getResources().openRawResource(R.drawable.green);
movie = Movie.decodeStream(is);
}
public GIFView(Context context, AttributeSet attrs) {
super(context, attrs);
is = getResources().openRawResource(R.drawable.green);
movie = Movie.decodeStream(is);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
long now = android.os.SystemClock.uptimeMillis();
if (moviestart == 0)
moviestart = now;
int relTime = (int) ((now - moviestart) % movie.duration());
movie.setTime(relTime);
movie.draw(canvas, 100, 100);
this.invalidate();
}
}
XML文件部分:
<TableRow>
<TextView
android:id="@+id/final_1"
android:width="200dp"
android:textSize="25sp"/>
<ru.rkarasev.miptrain.GIFView
android:layout_marginLeft="30dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:id="@+id/greenarrow">
</ru.rkarasev.miptrain.GIFView>
<TextView
android:id="@+id/time_1"
android:text=""
android:textSize="30sp"/>
</TableRow>
但是这个视图应该是空的,它没有显示任何东西!你能告诉我有什么问题吗
UPD:当我打开activity_main.xml文件时,它不会显示布局的外观,但会显示以下错误:
java.lang.NullPointerException
at ru.rkarasev.miptrain.GIFView.onDraw(GIFView.java:34)
at android.view.View.draw(View.java:13707)
at android.view.View.draw(View.java:13591)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.draw(View.java:13589)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.draw(View.java:13589)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.draw(View.java:13710)
at android.view.View.draw(View.java:13591)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.draw(View.java:13589)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.draw(View.java:13710)
at android.view.View.draw(View.java:13591)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.draw(View.java:13710)
视图中的第34个字符串是:
int relTime = (int)((now - moviestart) % movie.duration());
似乎没有初始化电影,但为什么
如果我再加上
System.out.println(movie.duration());
在onDraw方法的开头,它给出了2100ms,这是正确的值。我根本不知道它是什么。似乎您的电影对象是空的,在跟踪它的源代码后,它会无声地失败(通过捕获抛出的IOException)并返回空对象 只需在代码中添加一个空检查,并尝试以另一种方式解码gif文件。请看这里:
或者,您可以尝试按此处建议将GIF移动到资产文件夹:移动到资产文件夹?这是什么意思?将你的gif从project base/res/drawable移动到project base/assets/如果他的电影对象为空,他怎么能在不抛出NullPointerException的情况下得到它的持续时间?他说它在oDraw方法中抛出NullPointerException,所以我猜是duration()引起的
System.out.println(movie.duration());