Рисованная анимация не работает
Я хочу использовать анимацию, которую можно рисовать в моем списке, но когда я запускаю listActivity, происходит сбой, я узнал об этом, когда удаляю эти 2 кода анимации
AnimationDrawable frameAnimation = (AnimationDrawable) GamePic.getBackground();
frameAnimation.start();
, он работает анимированно в моем телефоне (p7 с android 4.4), но в других телефонах, которые я пробовал (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;
}
}
}
Спасибо
2 ответа
Я нашел свою проблему!
я использовал GamePic.setImageResource(Resources2.GamePicArray[position]);
но я должен использовать
GamePic.setBackgroundResource(Resources2.GamePicArray[position]);
теперь работает нормально!
Как описано в документации, вы должны подождать, пока представление не будет прикреплено к окну, прежде чем начинать анимацию. Для этого вы должны добавить 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. Вот некоторые учебные ссылки, это, это и это также этот вопрос