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. 追加することでハードウェアアクセラレーションを無効にすることができます

    android:hardwareAccelerated="false"

マニフェスト ファイルの 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 に答える