日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

android - 對(duì)button的width屬性做屬性動(dòng)畫時(shí)出錯(cuò)

瀏覽:255日期:2024-08-23 09:24:27

問題描述

給button寫了一個(gè)包裝類,設(shè)置setWidth()和getWidth()方法,大多時(shí)候動(dòng)畫運(yùn)行是正確的,但是當(dāng)我連續(xù)運(yùn)行幾次之后就出錯(cuò)了,目的是把button的寬度從500px通過動(dòng)畫變成800px

android - 對(duì)button的width屬性做屬性動(dòng)畫時(shí)出錯(cuò)

運(yùn)行幾次后, 動(dòng)畫執(zhí)行完成后button的寬度未設(shè)置為800, 如下圖:

android - 對(duì)button的width屬性做屬性動(dòng)畫時(shí)出錯(cuò)

這是代碼

public class MainActivity extends AppCompatActivity { private static final String TAG = 'MainActivity'; private TextView textView; private Button button; private int clickTimes = 0; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.click);textView = (TextView) findViewById(R.id.tv_showWidth);button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {performAnimate();clickTimes ++;ViewTreeObserver observer = button.getViewTreeObserver();observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() {textView.setText('The ' + (clickTimes) + 'th click' + 'button’s width:' + button.getWidth()); }}); }}); } private void performAnimate() {ViewWrapper viewWrapper = new ViewWrapper(button);ObjectAnimator.ofInt(viewWrapper, 'width', 500, 800).setDuration(1000).start(); } private static class ViewWrapper {private View mTarget;public ViewWrapper(View mTarget) { this.mTarget = mTarget;}public int getWidth() { return mTarget.getLayoutParams().width;}public void setWidth(int width) { mTarget.getLayoutParams().width = width; mTarget.requestLayout(); //長度寬度改變需要調(diào)用此方法進(jìn)行view的測(cè)量、布局和繪制 Log.d(TAG, 'setWidth: ' + mTarget.getWidth());} }}

layout 文件

<LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools' android: android:layout_width='match_parent' android:layout_height='match_parent' android:orientation='vertical' tools:context='com.example.circleview.MainActivity'> <Buttonandroid: android:layout_width='wrap_content'android:layout_height='50dp'android:text='Property Animation' /> <TextViewandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:text='please click the button' /></LinearLayout>

問題解答

回答1:

問題就出在 performAnimate() 的 ObjectAnimator.ofInt(...) 調(diào)用, 由于 ObjectAnimator 本身實(shí)現(xiàn)的問題, 它會(huì)把 target 存為 WeakReference 類型. 關(guān)鍵代碼如下:

public static ObjectAnimator ofInt(Object target, String propertyName, int... values) { ObjectAnimator anim = new ObjectAnimator(target, propertyName); anim.setIntValues(values); return anim;}private ObjectAnimator(Object target, String propertyName) { setTarget(target); setPropertyName(propertyName);}@Overridepublic void setTarget(@Nullable Object target) { final Object oldTarget = getTarget(); if (oldTarget != target) {if (isStarted()) { cancel();}mTarget = target == null ? null : new WeakReference<Object>(target);// New target should cause re-initialization prior to startingmInitialized = false; }}

由于這個(gè)原因, 如果不保持對(duì)象實(shí)例, 那么就很有可能會(huì)被gc回收掉. 因此, ViewWrapper 應(yīng)該作為類成員變量, 以防被回收.

另外, 如果不停地按, 就會(huì)不停地產(chǎn)生多個(gè)動(dòng)畫請(qǐng)求. 而上次以及上上次(上...上次)未執(zhí)行完成的動(dòng)畫會(huì)影響當(dāng)次的動(dòng)畫動(dòng)作. 如果要達(dá)到預(yù)期的要求, 就應(yīng)該把上次的動(dòng)畫請(qǐng)求取消掉. 代碼如下:

private ObjectAnimator mObjectAnimator;private ViewWrapper viewWrapper;private void performAnimate() { if (mObjectAnimator != null) {mObjectAnimator.cancel();mObjectAnimator = null; } viewWrapper = new ViewWrapper(button); mObjectAnimator = ObjectAnimator.ofInt(viewWrapper, 'width', 500, 800).setDuration(1000); mObjectAnimator.start();}

相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜桃tv一区二区三区| 日本成人在线一区| 国产日韩视频| 国产精品va| 福利视频一区| 久久精品导航| 蜜臀国产一区二区三区在线播放| 香蕉成人久久| 国产欧美日韩视频在线| 国产激情一区| 九九色在线视频| 在线亚洲免费| 国产精品一区二区三区www | 亚洲精品四区| 欧美激情视频一区二区三区在线播放| 国产精品久久久免费| 日韩在线观看不卡| 亚洲毛片在线| 成人在线免费观看网站| 九九久久婷婷| 日日夜夜免费精品| 福利片在线一区二区| 日韩视频精品在线观看| 欧美日本久久| 精品久久免费| 五月国产精品| 成人午夜亚洲| 日韩午夜电影| 国产一区二区三区网| 视频一区二区国产| 91精品xxx在线观看| 日韩国产欧美视频| 99久久亚洲精品蜜臀| 青青草国产成人99久久| 欧美1区2区3区| 欧美成人精品午夜一区二区| 丝袜美腿高跟呻吟高潮一区| 首页国产精品| 国产视频一区二区在线播放| 亚洲精品1区| 桃色一区二区| 精品欧美日韩精品| 久久先锋影音| 国产精品17p| 国产亚洲一区二区三区不卡| 视频精品一区| 中文字幕日韩欧美精品高清在线| 久久精品av| 日本综合字幕| 国产一区二区三区四区| 久久精品欧洲| 精品日韩一区| 91综合网人人| 日韩精品1区| 吉吉日韩欧美| 四虎国产精品免费观看| 国产成人久久| 鲁大师精品99久久久| 欧美日韩 国产精品| 91精品国产91久久久久久黑人| 欧美男人天堂| 婷婷成人在线| 美女国产精品| 日本一区二区三区中文字幕| 91成人在线网站| 亚洲国产日韩欧美在线| 久久亚洲图片| 久久精品99国产精品| 欧美激情网址| 欧美一区二区三区高清视频| 国产一区二区精品| 日韩高清二区| 欧美国产日韩电影| 日韩欧美午夜| 日韩精品一二三区| 国产日韩三级| 欧美91福利在线观看| 亚洲午夜久久| 久久亚洲精品中文字幕| 欧美在线观看视频一区| 婷婷成人av| 香蕉视频亚洲一级| 中文一区一区三区免费在线观| 国产免费播放一区二区| 天堂а√在线最新版中文在线| 黄色亚洲大片免费在线观看| 欧美一区二区三区久久| 国语精品一区| 91在线成人| 亚洲国产成人二区| 日日夜夜免费精品| 色爱综合av| 国产精品嫩草影院在线看| 日韩精品久久久久久久电影99爱| 欧美专区在线| 色天使综合视频| 久久av网址| 亚洲三级观看| 在线综合视频| 亚洲日本网址| 国产高清亚洲| 日韩欧美在线精品| 日韩欧美字幕| 国产精品久久久久毛片大屁完整版| 婷婷综合激情| 91精品韩国| 国产精品xx| 国产精品美女午夜爽爽| 亚洲精品欧洲| 久久青草久久| 午夜av不卡| 免费观看亚洲| 中文字幕人成乱码在线观看| 精品三级在线| 久久久久伊人| 成人黄色av| 精品精品国产三级a∨在线| 日韩一区二区三区精品| 喷白浆一区二区| 一本色道精品久久一区二区三区| 日韩在线免费| 999久久久精品国产| 欧美午夜精彩| 免费不卡中文字幕在线| 日韩不卡在线| 欧美日韩精品免费观看视频完整| 午夜免费一区| 日韩精品一二三| 日本不卡一二三区黄网| 国产人成精品一区二区三| 国产欧美激情| 福利一区在线| 久久久久久美女精品| 免费毛片在线不卡| 一区二区三区四区日韩| 国产欧美日韩一区二区三区在线| 欧美在线精品一区| 国产一区二区三区四区五区传媒| 色天使综合视频| 欧美少妇精品| 亚洲视频二区| 精品国产午夜肉伦伦影院| 国产精品99一区二区| 亚洲精品护士| 国产不卡精品在线| 亚洲一区久久| 国产精品白丝一区二区三区| 精品高清久久| 婷婷亚洲综合| 国产高清视频一区二区| 婷婷综合五月| 麻豆久久一区| 国产精品试看| 岛国精品一区| 日韩高清不卡一区| 天堂日韩电影| 国产精品亚洲二区| 男人天堂欧美日韩| 九色porny丨国产首页在线| 亚洲免费在线| 麻豆高清免费国产一区| 日韩高清中文字幕一区二区| 夜夜嗨一区二区三区| 国产精品一二| 欧美综合二区| а√天堂8资源中文在线| 亚洲专区视频| 国产精品成人3p一区二区三区| 欧美日韩国产免费观看视频| 免费亚洲婷婷| 亚洲深夜福利在线观看| 日韩一区电影| 日韩国产高清在线| 国产精品一区二区三区www| 综合激情视频| 1024精品一区二区三区| 精品久久视频| 久久在线91| 中文字幕一区二区三区日韩精品| 欧美色图一区| 极品日韩av| 国内精品福利| 91九色精品| 亚洲欧美日本日韩| 中国女人久久久| 国产精品日韩| 蜜臀国产一区二区三区在线播放 | 国产一级成人av| 日本电影久久久| 久久激情av| 久久的色偷偷| 国产亚洲第一伦理第一区| 日韩精品免费视频一区二区三区 | 国产精选久久| 麻豆中文一区二区| av中文字幕在线观看第一页 | 久久亚洲欧美| 欧美一区在线观看视频| 国产欧美91| 国产精品极品|