GIF图像适用于模拟器,但不适用于真实设备?

时间:2013-01-29 13:07:01

标签: android android-animation animated-gif

我正在尝试显示我已使用此代码的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图像但是当我在真实设备中运行时它没有显示任何内容 ...这是什么问题?

1 个答案:

答案 0 :(得分:4)

在上面的设备(4.x)上,由于在这些设备中启用了硬件加速,因此电影对象无法正常工作。因此,通过禁用硬件加速,您可以使图像在仿真器和实际设备上都能正常工作。

  1. 您可以通过添加

    来禁用硬件加速

    机器人:硬件加速="假"

  2. 清单文件inder活动代码

    中的

    <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图像将在模拟器和真实设备上显示:)