日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android里面这个动画不动了,android,AnimationDrawable 在ListView里不动的分析及解决办法。...

發布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android里面这个动画不动了,android,AnimationDrawable 在ListView里不动的分析及解决办法。... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面是我拷貝的一個list adapter過來, 關于這個問題, 大家只需要關注紅色部分代碼, 在官方文檔中有下面一段:

It's important to note that the start() method called on the AnimationDrawable cannot be called during the onCreate() method of your Activity, because the AnimationDrawable is not yet fully attached to the window. If you want to play the animation immediately, without requiring interaction, then you might want to call it from the

這是官方的解決辦法。

下面紅色代碼部分是我的解決辦法。 大家仔細看上面, 會明白, 就是說,在onCreate函數里不能啟動動畫。

static class AlbumListAdapter extends SimpleCursorAdapter implements SectionIndexer {

private final Drawable mNowPlayingOverlay;

private final BitmapDrawable mDefaultAlbumIcon;

private int mAlbumIdx;

private int mArtistIdx;

private int mAlbumArtIndex;

private final Resources mResources;

private final StringBuilder mStringBuilder = new StringBuilder();

private final String mUnknownAlbum;

private final String mUnknownArtist;

private final String mAlbumSongSeparator;

private final Object[] mFormatArgs = new Object[1];

private AlphabetIndexer mIndexer;

private AlbumBrowserActivity mActivity;

private AsyncQueryHandler mQueryHandler;

private String mConstraint = null;

private boolean mConstraintIsValid = false;

//add by zengdezhi for samsung musicplayer s

private Handler mHandler = new Handler();

private Runnable AmThread = new Runnable(){

@Override

public void run() {

// TODO Auto-generated method stub

rocketAnimation.start();

}

};

//add by zengdezhi for samsung musicplayer e

static class ViewHolder {

TextView line1;

TextView line2;

ImageView play_indicator;

ImageView icon;

}

class QueryHandler extends AsyncQueryHandler {

QueryHandler(ContentResolver res) {

super(res);

}

@Override

protected void onQueryComplete(int token, Object cookie, Cursor cursor) {

//Log.i("@@@", "query complete");

mActivity.init(cursor);

}

}

AlbumListAdapter(Context context, AlbumBrowserActivity currentactivity,

int layout, Cursor cursor, String[] from, int[] to) {

super(context, layout, cursor, from, to);

mActivity = currentactivity;

mQueryHandler = new QueryHandler(context.getContentResolver());

mUnknownAlbum = context.getString(R.string.unknown_album_name);

mUnknownArtist = context.getString(R.string.unknown_artist_name);

mAlbumSongSeparator = context.getString(R.string.albumsongseparator);

Resources r = context.getResources();

mNowPlayingOverlay = r.getDrawable(R.drawable.indicator_ic_mp_playing_list);

Bitmap b = BitmapFactory.decodeResource(r, R.drawable.albumart_mp_unknown_list);

mDefaultAlbumIcon = new BitmapDrawable(context.getResources(), b);

// no filter or dither, it's a lot faster and we can't tell the difference

mDefaultAlbumIcon.setFilterBitmap(false);

mDefaultAlbumIcon.setDither(false);

getColumnIndices(cursor);

mResources = context.getResources();

}

private void getColumnIndices(Cursor cursor) {

if (cursor != null) {

mAlbumIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM);

mArtistIdx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ARTIST);

mAlbumArtIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM_ART);

if (mIndexer != null) {

mIndexer.setCursor(cursor);

} else {

mIndexer = new MusicAlphabetIndexer(cursor, mAlbumIdx, mResources.getString(

R.string.fast_scroll_alphabet));

}

}

}

public void setActivity(AlbumBrowserActivity newactivity) {

mActivity = newactivity;

}

public AsyncQueryHandler getQueryHandler() {

return mQueryHandler;

}

@Override

public View newView(Context context, Cursor cursor, ViewGroup parent) {

View v = super.newView(context, cursor, parent);

ViewHolder vh = new ViewHolder();

vh.line1 = (TextView) v.findViewById(R.id.line1);

vh.line2 = (TextView) v.findViewById(R.id.line2);

vh.play_indicator = (ImageView) v.findViewById(R.id.play_indicator);

vh.icon = (ImageView) v.findViewById(R.id.icon);

vh.icon.setBackgroundDrawable(mDefaultAlbumIcon);

vh.icon.setPadding(0, 0, 1, 0);

v.setTag(vh);

return v;

}

@Override

public void bindView(View view, Context context, Cursor cursor) {

ViewHolder vh = (ViewHolder) view.getTag();

String name = cursor.getString(mAlbumIdx);

String displayname = name;

boolean unknown = name == null || name.equals(MediaStore.UNKNOWN_STRING);

if (unknown) {

displayname = mUnknownAlbum;

}

vh.line1.setText(displayname);

name = cursor.getString(mArtistIdx);

displayname = name;

if (name == null || name.equals(MediaStore.UNKNOWN_STRING)) {

displayname = mUnknownArtist;

}

vh.line2.setText(displayname);

ImageView iv = vh.icon;

// We don't actually need the path to the thumbnail file,

// we just use it to see if there is album art or not

String art = cursor.getString(mAlbumArtIndex);

long aid = cursor.getLong(0);

if (unknown || art == null || art.length() == 0) {

iv.setImageDrawable(null);

} else {

Drawable d = MusicUtils.getCachedArtwork(context, aid, mDefaultAlbumIcon);

iv.setImageDrawable(d);

}

long currentalbumid = MusicUtils.getCurrentAlbumId();

iv = vh.play_indicator;

if (currentalbumid == aid) {

//change by zengdezhi for samsung musicplayer s

//??????????????? iv.setImageDrawable(mNowPlayingOverlay);

iv.setBackgroundResource(R.drawable.playing_list_framebyframe);

rocketAnimation = (AnimationDrawable) iv.getBackground();

//?????????? ??? ?rocketAnimation.start();

mHandler.postDelayed(AmThread, 300);

System.out.println("zengdezhialbumanimation");

//change by zengdezhi for samsung musicplayer e

} else {

//add by zengdezhi for samsung musicplayer s

iv.setBackgroundDrawable(null);

//add by zengdezhi for samsung musicplayer e

iv.setImageDrawable(null);

}

}

@Override

public void changeCursor(Cursor cursor) {

if (mActivity.isFinishing() && cursor != null) {

cursor.close();

cursor = null;

}

if (cursor != mActivity.mAlbumCursor) {

mActivity.mAlbumCursor = cursor;

getColumnIndices(cursor);

super.changeCursor(cursor);

}

}

@Override

public Cursor runQueryOnBackgroundThread(CharSequence constraint) {

String s = constraint.toString();

if (mConstraintIsValid && (

(s == null && mConstraint == null) ||

(s != null && s.equals(mConstraint)))) {

return getCursor();

}

Cursor c = mActivity.getAlbumCursor(null, s);

mConstraint = s;

mConstraintIsValid = true;

return c;

}

public Object[] getSections() {

return mIndexer.getSections();

}

public int getPositionForSection(int section) {

return mIndexer.getPositionForSection(section);

}

public int getSectionForPosition(int position) {

return 0;

}

}

通過看上面的紅色代碼, 我們可以發現, 我將立即啟動動畫語句//?????????? ??? ?rocketAnimation.start();

mHandler.postDelayed(AmThread, 300)

注銷了, 而是改為了通過Handler 300ms后啟動。 這是因為在onCreate函數中不能啟動動畫的原因。

如官方文檔所述的一樣。 呵呵, 這個問題讓我很不爽。 現在解決了, 來分享給大家,

我也是看網友的 微博。 我是根據這篇文章的提問找到解決辦法的。 由于要注冊網站才能回復你的問題。

所以我不想那么麻煩。 你只需要把你的標題搜索一下, 應該就能搜索到我的文章了, 如果你還有解決,

歡迎搜索。 呵呵

總結

以上是生活随笔為你收集整理的android里面这个动画不动了,android,AnimationDrawable 在ListView里不动的分析及解决办法。...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。