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

您的位置:首頁技術文章
文章詳情頁

android - 對button的width屬性做屬性動畫時出錯

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

問題描述

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

android - 對button的width屬性做屬性動畫時出錯

運行幾次后, 動畫執行完成后button的寬度未設置為800, 如下圖:

android - 對button的width屬性做屬性動畫時出錯

這是代碼

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(); //長度寬度改變需要調用此方法進行view的測量、布局和繪制 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(...) 調用, 由于 ObjectAnimator 本身實現的問題, 它會把 target 存為 WeakReference 類型. 關鍵代碼如下:

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; }}

由于這個原因, 如果不保持對象實例, 那么就很有可能會被gc回收掉. 因此, ViewWrapper 應該作為類成員變量, 以防被回收.

另外, 如果不停地按, 就會不停地產生多個動畫請求. 而上次以及上上次(上...上次)未執行完成的動畫會影響當次的動畫動作. 如果要達到預期的要求, 就應該把上次的動畫請求取消掉. 代碼如下:

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();}

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品中文在线| 日韩欧美高清一区二区三区| 久久精品一区二区三区中文字幕| 亚洲免费专区| 日韩精品中文字幕一区二区| 日韩精品视频中文字幕| 欧美天堂一区| 久久中文字幕一区二区| 国产亚洲欧美日韩精品一区二区三区 | 亚洲欧洲日韩| 日本精品另类| 欧美日韩亚洲一区二区三区在线| 欧美精品观看| 欧美激情五月| 麻豆视频在线看| 欧美成人精品| 老司机久久99久久精品播放免费| 亚洲另类视频| 国产麻豆一区二区三区| 精品一区二区三区中文字幕| 日韩欧美精品综合| 国产亚洲网站| 日韩国产精品久久久久久亚洲| 久久av偷拍| 免费一二一二在线视频| 欧美日韩国产免费观看视频| 亚洲免费激情| 日韩二区在线观看| 国产精品成人a在线观看| 色黄视频在线观看| 日韩不卡免费高清视频| 午夜久久久久| 欧美亚洲一级| 精品欧美一区二区三区在线观看| 亚洲专区一区| 国产精品v亚洲精品v日韩精品| 免费看av不卡| 亚洲精品福利| 日韩在线视频精品| 最新国产精品视频| www.九色在线| 丝袜美腿成人在线| 国产精品久久乐| 久久精品免费一区二区三区| 日本中文字幕一区二区| 久久影院资源站| 欧美日韩视频| 久久精品资源| 2023国产精品久久久精品双 | 视频一区二区三区在线| 国产精品15p| 女主播福利一区| 国产精品日本一区二区不卡视频| 久久久久99| 国产精品成人3p一区二区三区| 中文av在线全新| 亚洲精品国模| 亚洲成a人片| 国产亚洲电影| 91精品福利| 极品av在线| 欧美日韩一区二区三区在线电影| 日韩国产一区| 国产日韩亚洲欧美精品| 国内精品福利| 国产精品久久国产愉拍| 99国产精品久久久久久久 | 欧美午夜精彩| 国产精选一区| 亚洲精品2区| 精品视频一区二区三区四区五区 | 国产激情在线播放| 免费在线观看日韩欧美| 国产精品99一区二区三| 午夜电影一区| 欧美日韩亚洲在线观看| 国产精品久久| 一本色道久久精品| 欧美日韩在线观看首页| 97久久超碰| 亚洲欧美日韩国产一区| 神马午夜久久| 国产精品蜜月aⅴ在线| 亚洲久久在线| 亚洲午夜91| 少妇久久久久| 荡女精品导航| 日韩二区在线观看| 视频在线观看91| 欧美69视频| 国产理论在线| 麻豆中文一区二区| 男女性色大片免费观看一区二区| 99久久久国产精品美女| 卡一卡二国产精品| 欧美影院视频| 日韩中文字幕一区二区高清99| 久久一级电影| 麻豆网站免费在线观看| 国产精品一区二区三区av麻| av不卡在线| 久久精品卡一| 日韩国产激情| 最近国产精品视频| 久久精品国产久精国产| 日本欧美韩国一区三区| 香蕉成人久久| 黑丝美女一区二区| 久久91导航| 国产精品不卡| 国产不卡精品| 日韩午夜一区| 亚洲免费影视| 99国产精品久久久久久久成人热 | 久久久久午夜电影| 成人在线网站| 欧美成a人免费观看久久| 国产一区二区三区91| 国产一区二区三区日韩精品 | 国产一在线精品一区在线观看| 日本综合字幕| 日韩高清中文字幕一区二区| 国产成人精品999在线观看| 国产精久久一区二区| 久久狠狠亚洲综合| 日韩精选在线| 国产伦精品一区二区三区在线播放| 日本成人中文字幕在线视频| 日韩中文字幕| 日本精品一区二区三区在线观看视频| 亚洲精品一级二级三级| 日韩精彩视频在线观看| 亚洲97av| 欧美亚洲免费| 欧美激情麻豆| 国产精品久久观看| 99国产精品一区二区| 欧美+日本+国产+在线a∨观看| 国产亚洲精品久久久久婷婷瑜伽| 午夜在线观看免费一区| 亚洲精品亚洲人成在线观看| 日韩二区三区四区| 免费看久久久| 日韩专区精品| 六月婷婷一区| 欧美亚洲tv| 国产在线日韩精品| 日韩一区电影| 国产亚洲高清视频| 日韩av中文字幕一区二区| 麻豆久久一区二区| 欧美久久天堂| 99pao成人国产永久免费视频| 中文字幕日本一区| 国产欧美日韩精品高清二区综合区| 九九九精品视频| 美女少妇全过程你懂的久久| 在线精品一区| 久久三级毛片| 国产国产精品| 欧美另类中文字幕 | 乱人伦精品视频在线观看| 欧美一级二级视频| 国产一区二区三区视频在线| 欧美日韩中文一区二区| 中文字幕日本一区二区| 美女高潮久久久| 精品中文一区| 日韩动漫一区| 亚洲风情在线资源| 亚洲激情偷拍| 国产精品s色| 九色porny丨国产首页在线| 亚洲中字黄色| 美女久久久久久| 亚洲欧美久久| 久久精品国产网站| 亚洲精品一区二区妖精| 欧美日韩一区二区三区四区在线观看| 超碰在线99| 亚洲一二av| 亚洲天堂av影院| 午夜天堂精品久久久久| 超碰99在线| 日韩在线观看中文字幕| 樱桃视频成人在线观看| 亚洲+小说+欧美+激情+另类| 超碰99在线| 亚州精品视频| 久久精品av| 国产精品国码视频| 中日韩男男gay无套| 精品三级国产| 国产精品久久久久久妇女| 久久精品一区二区国产| 午夜日本精品| 国产一区国产二区国产三区| 少妇高潮一区二区三区99| 韩国久久久久久| 日韩二区三区在线观看|