看板 AndroidDev 關於我們 聯絡資訊
各位前輩好 我剛接觸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
brandonron:個人見解,從你的敘述感覺使用者click時,只是觸發事 03/30 04:14
brandonron:件重新開始。而且也不知道你有沒有檢查紀錄的位置值在" 03/30 04:14
brandonron:每次重新click後是否還存在"? 03/30 04:14
qweqweqweqwe:試試看ObjectAnimator 個人覺得很方便 03/30 09:13
givemepass:跑完lv 設定新位置在lv.getX() lv.getY()呢? 03/30 10:01
Nobuta:感謝回應.我在第一次執行完t和iv.layout前後,print出iv的座 03/30 11:31
Nobuta:標,確定iv是在"B",且在第二次執行t的前一行也還是在"B",但 03/30 11:39
Nobuta:第二次一執行完進入onAnimationEnd時,就跳回A了.getX/Y亦然 03/30 11:40
Nobuta:qweqweqweqwe, 我用ObjectAnimator結果還是一樣一直重複 03/30 12:58
Nobuta:ObjectAnimator.ofFloat(iv, View.TRANSLATION_X, 50); 03/30 12:58
tac0wu:改動layout parameter 然後request layout有這樣試過嗎? 03/30 19:18
Nobuta:我剛試用setMargins, 好像接近我的目的了 但是重複執行 03/31 01:24
Nobuta:setMargins 移動的距離一直跟我設定的不一樣 好困擾阿.... 03/31 01:26
tac0wu:應該不會很複雜才對 有空幫你試試看 03/31 21:47
tac0wu:http://paste.plurk.com/show/1841668/ 03/31 22:29
tac0wu:這應該是你要的效果? 03/31 22:30