0

リストでアニメーション ドローアブルを使用したいのですが、listActivity を開始するとクラッシュします。 この 2 つのアニメーション コードを削除すると、このことから学びました。

 AnimationDrawable frameAnimation = (AnimationDrawable) GamePic.getBackground();
        frameAnimation.start();

、それは私の電話(android 4.4のp7)でそれ自体でアニメーション化されますが、私が試した他の電話(asus memopad 7、sony c)では、アニメーション化されたドローアブルなしで動作します!このアップコードを使用すると、すべての電話がクラッシュするだけです。以下は私のコンペレットコードです。何が問題なのですか?

public class MyList extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.games_list);

    setListAdapter(new AA());
}


@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    Toast.makeText(MyList.this, "item" + position + "is clicked", Toast.LENGTH_SHORT).show();

}


class AA extends ArrayAdapter<String> {

    public AA() {
        super(MyList.this, R.layout.games_list_layout, Resources2.GameListArray);
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row = convertView;
        if (row == null) {
            LayoutInflater inflater = getLayoutInflater();
            row = inflater.inflate(R.layout.games_list_layout, parent, false);
        }
        TextView GameName = (TextView) row.findViewById(R.id.textView1);
        ImageView GamePic = (ImageView) row.findViewById(R.id.imageView2);
        ImageView Cartridge = (ImageView) row.findViewById(R.id.imageView1);

        GameName.setText(Resources2.GameListArray[position]);
        GamePic.setImageResource(Resources2.GamePicArray[position]);
        Cartridge.setImageResource(Resources2.CartridgeFrame[Resources2.cartridgeColor[position]]);

        AnimationDrawable frameAnimation = (AnimationDrawable) GamePic.getBackground();
        frameAnimation.start();

        return row;

    }
}

}

ありがとう

4

2 に答える 2

0

ドキュメントに記載されているように、アニメーションを開始する前に、ビューがウィンドウにアタッチされるまで待つ必要があります。そのため、ビューがアタッチされたときに実行される OnAttachStateChangeListener をビューに追加し、そこからアニメーションを開始する必要があります。

ImageView img = (ImageView)v.findViewById(R.id.image);
img.setBackgroundResource(R.drawable.anim);
img.addOnAttachStateChangeListener(new  View.OnAttachStateChangeListener() {
  @Override
  public void onViewAttachedToWindow(View v) {
  AnimationDrawable animation = (AnimationDrawable) v.getBackground();
  animation .start();
  }

@Override
public void onViewDetachedFromWindow(View v) {
}
});

または、GIF を使用している場合は Movie クラスを使用します。ここにいくつかのラーニング リンクがあります。これこれ、およびこれこの質問です。

于 2015-05-27T15:36:23.213 に答える
0

私は私の問題を見つけました!

私は GamePic.setImageResource(Resources2.GamePicArray[position]); を使用していました。

しかし、私は使用する必要があります

GamePic.setBackgroundResource(Resources2.GamePicArray[position]);

今では正常に動作します!

于 2015-05-27T16:10:38.783 に答える