用android.graphics.Movie显示.gif

我试图用animationGIF创build一个视图..

当我尝试在模拟器中运行下面的代码都工作正常。 但是,当我尝试在真正的智能手机上运行,​​没有任何反应。

我的看法:

public class GIFView extends View { private Movie mMovie; private long movieStart; public GIFView(Context context) { super(context); initializeView(); } public GIFView(Context context, AttributeSet attrs) { super(context, attrs); initializeView(); } public GIFView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initializeView(); } private void initializeView() { InputStream is = getContext().getResources().openRawResource( R.drawable.cookies2); mMovie = Movie.decodeStream(is); } protected void onDraw(Canvas canvas) { canvas.drawColor(Color.TRANSPARENT); super.onDraw(canvas); long now = android.os.SystemClock.uptimeMillis(); if (movieStart == 0) { movieStart = (int) now; } if (mMovie != null) { int relTime = (int) ((now - movieStart) % mMovie.duration()); mMovie.setTime(relTime); mMovie.draw(canvas, getWidth() - mMovie.width(), getHeight() - mMovie.height()); this.invalidate(); } }} 

我的活动:

 public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GIFView gifView = new GIFView(this); setContentView(gifView); }} 

我的智能手机截图: 我的智能手机截图 我的模拟器截图: 我的模拟器截图

为什么我的应用不能在智能手机上运行?

Solutions Collecting From Web of "用android.graphics.Movie显示.gif"

不要closures整个应用程序的硬件加速。 这是残废。 只要closures它的视图:

 setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

我不认为Movie对象在硬件加速开启的设备上正常工作(默认情况下Android 4.x中的设备支持它,您的模拟器可能不会)。

尝试添加

  android:hardwareAccelerated="false" 

到AndroidManifest.xml中的MainActivity的活动定义

例:

 <activity android:name=".MainActivity" android:hardwareAccelerated="false" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

加载animationGIF似乎很棘手,但我build议使用WebView作为替代。

请按照以下步骤解决问题:

  1. 在Android资产中复制您的GIF。
  2. 调用webView.loadDataWithBaseURL(“file:/// android_asset /”,“”,“text / html”,“utf-8”,null);

我希望它有帮助!