Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用android.graphics.Movie显示.gif_Android_Animated Gif - Fatal编程技术网

使用android.graphics.Movie显示.gif

使用android.graphics.Movie显示.gif,android,animated-gif,Android,Animated Gif,我正在尝试,创建一个带有动画GIF的视图 当我尝试在emulator中运行以下代码时,一切正常。但当我试着用真正的智能手机跑步时,什么都没发生 我的看法是: public class GIFView extends View { private Movie mMovie; private long movieStart; public GIFView(Context context) { super(context); initializeView(); } public

我正在尝试,创建一个带有动画GIF的视图

当我尝试在emulator中运行以下代码时,一切正常。但当我试着用真正的智能手机跑步时,什么都没发生

我的看法是:

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);
}}
我的智能手机屏幕截图: 我的模拟器屏幕截图:


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

我认为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>

不要关闭整个应用程序的硬件加速。那太可怕了。只需将其关闭即可查看:

setLayerType(View.LAYER_TYPE_SOFTWARE, null);

加载动画GIF看起来很棘手,但我建议使用网络视图作为替代方案

要解决此问题,请执行以下操作:

  • 在Android资产中复制GIF
  • 调用webView.loadDataWithBaseURL(“file:///android_asset/“,”,“文本/html”,“utf-8”,空)
    我希望有帮助

    也许你应该尝试通过一个布局加载你的动画,比如这里的这个家伙:,以防传递一些布局/视图信息?Thanx@Alex:你的问题帮助我们在android中制作gif图像。它成功了。谢谢你能解释一下那里到底发生了什么吗。