[問題] 多次TranslateAnimation無法接續位移

看板AndroidDev作者 (悶不死自己)時間10年前 (2014/03/30 03:40), 編輯推噓5(5011)
留言16則, 5人參與, 最新討論串1/2 (看更多)
各位前輩好 我剛接觸android一兩個月 然而這個問題困擾我最近好一陣子 也上網查了很久 希望有人能為我解惑 目的: 我有一個ImageView iv 和 一個TranslateAnimation t 每次的user event(例如click button) 都會讓這個iv執行一次t的位移動畫 而我希望iv在執行完t以後就能留在原地 下次再執行t的時候 就從上一次的結果繼續位移下去 例如, 第一次從A點到B點座標 第二次 B->C 第三次 C->D .... 我的作法: 為了讓iv在執行完t以後留在原地 我在onAnimationEnd設置iv移動後的座標 public void onAnimationEnd(Animation arg0) { int left = aaa.getLeft() + translateDist; int width = aaa.getWidth(); int top = aaa.getTop(); int height = aaa.getHeight(); iv.clearAnimation(); iv.layout(left, left+wdith, top, top+height); } 一樣假設第一次的動畫把iv從A點移動到了B點 然而以上的作法雖然讓iv在第一次執行完t以後留在了原地B 在執行同一個t的前提下, 接下來的每次的動畫都只能重複把iv從A移動到B (也就是iv又跳回了A在移動到B) 我也交錯試了setFillAfter和setFillEnable 或是其他設置view位置的方法, setLeft, setRigth... 結果還是一樣 目前我只能記錄著移動完的座標 然後依照新的座標每次都new一個新的TranslationAnimation t'來達到我想要的效果 但我很不想這樣做 (因為除了我有多個ImageView之外, 我需要的動畫比舉例的還要複雜) 而且我也很好奇我的iv.layout的確改變了位置 為什麼執行動畫的時候還是跳了回去呢 希望有人能為我解惑 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.45.245.217 ※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1396122042.A.49A.html

03/30 04:14, , 1F
個人見解,從你的敘述感覺使用者click時,只是觸發事
03/30 04:14, 1F

03/30 04:14, , 2F
件重新開始。而且也不知道你有沒有檢查紀錄的位置值在"
03/30 04:14, 2F

03/30 04:14, , 3F
每次重新click後是否還存在"?
03/30 04:14, 3F

03/30 09:13, , 4F
試試看ObjectAnimator 個人覺得很方便
03/30 09:13, 4F

03/30 10:01, , 5F
跑完lv 設定新位置在lv.getX() lv.getY()呢?
03/30 10:01, 5F

03/30 11:31, , 6F
感謝回應.我在第一次執行完t和iv.layout前後,print出iv的座
03/30 11:31, 6F

03/30 11:39, , 7F
標,確定iv是在"B",且在第二次執行t的前一行也還是在"B",但
03/30 11:39, 7F

03/30 11:40, , 8F
第二次一執行完進入onAnimationEnd時,就跳回A了.getX/Y亦然
03/30 11:40, 8F

03/30 12:58, , 9F
qweqweqweqwe, 我用ObjectAnimator結果還是一樣一直重複
03/30 12:58, 9F

03/30 12:58, , 10F
ObjectAnimator.ofFloat(iv, View.TRANSLATION_X, 50);
03/30 12:58, 10F

03/30 19:18, , 11F
改動layout parameter 然後request layout有這樣試過嗎?
03/30 19:18, 11F

03/31 01:24, , 12F
我剛試用setMargins, 好像接近我的目的了 但是重複執行
03/31 01:24, 12F

03/31 01:26, , 13F
setMargins 移動的距離一直跟我設定的不一樣 好困擾阿....
03/31 01:26, 13F

03/31 21:47, , 14F
應該不會很複雜才對 有空幫你試試看
03/31 21:47, 14F

03/31 22:29, , 15F

03/31 22:30, , 16F
這應該是你要的效果?
03/31 22:30, 16F
文章代碼(AID): #1JDo6wIQ (AndroidDev)
文章代碼(AID): #1JDo6wIQ (AndroidDev)