我正在尝试显示我已使用此代码的gif图像
MainActivity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MYGIFView(this));
}
}
和 MYGIFView 类:
public class MYGIFView extends View {
Movie movie,movie1;
InputStream is=null,is1=null;
long moviestart;
public MYGIFView(Context context) {
super(context);
is=context.getResources().openRawResource(R.drawable.piggy);
movie=Movie.decodeStream(is);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
super.onDraw(canvas);
long now=android.os.SystemClock.uptimeMillis();
System.out.println("now="+now);
if (moviestart == 0) { // first time
moviestart = now;
}
System.out.println("\tmoviestart="+moviestart);
int relTime = (int)((now - moviestart) % movie.duration()) ;
System.out.println("time="+relTime+"\treltime="+movie.duration());
movie.setTime(relTime);
movie.draw(canvas,this.getWidth()/2-20,this.getHeight()/2-40);
this.invalidate();
}
}
它显示了来自模拟器和gif worrks中的drawale文件夹的gif图像但是当我在真实设备中运行时它没有显示任何内容 ...这是什么问题?
答案 0 :(得分:4)
在上面的设备(4.x)上,由于在这些设备中启用了硬件加速,因此电影对象无法正常工作。因此,通过禁用硬件加速,您可以使图像在仿真器和实际设备上都能正常工作。
您可以通过添加
来禁用硬件加速机器人:硬件加速="假"
<activity
android:name=".MainActivity"
android:hardwareAccelerated="false"
android:label="@string/app_name" >
</activity>
2.您也可以以编程方式禁用硬件加入
例如:MYGIFView是您要在其中显示GIF图像的自定义视图
MYGIFView mMYGIFView =(MYGIFView)findViewById(R.id.myGifImageView);
mMYGIFView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
通过使用此功能,您的GIF图像将在模拟器和真实设备上显示:)