2

我正在尝试显示 gif 图像我已使用此代码

主要活动

       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();
}
}

它显示了模拟器中drawale文件夹中的gif图像和gif工作,但是当我在真实设备中运行它时,它什么也没显示......这里有什么问题?

4

1 回答 1

4

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

  1. 您可以通过添加禁用硬件加速

    安卓:硬件加速=“假”

在您的清单文件 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 图像将同时显示在模拟器和真实设备上:)

于 2014-09-22T05:37:34.007 回答