作者Nobuta (闷不死自己)
看板AndroidDev
标题[问题] 多次TranslateAnimation无法接续位移
时间Sun Mar 30 03:40:39 2014
各位前辈好
我刚接触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://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1396122042.A.49A.html
1F:推 brandonron:个人见解,从你的叙述感觉使用者click时,只是触发事 03/30 04:14
2F:→ brandonron:件重新开始。而且也不知道你有没有检查纪录的位置值在" 03/30 04:14
3F:→ brandonron:每次重新click後是否还存在"? 03/30 04:14
4F:→ qweqweqweqwe:试试看ObjectAnimator 个人觉得很方便 03/30 09:13
5F:推 givemepass:跑完lv 设定新位置在lv.getX() lv.getY()呢? 03/30 10:01
6F:→ Nobuta:感谢回应.我在第一次执行完t和iv.layout前後,print出iv的座 03/30 11:31
7F:→ Nobuta:标,确定iv是在"B",且在第二次执行t的前一行也还是在"B",但 03/30 11:39
8F:→ Nobuta:第二次一执行完进入onAnimationEnd时,就跳回A了.getX/Y亦然 03/30 11:40
9F:→ Nobuta:qweqweqweqwe, 我用ObjectAnimator结果还是一样一直重复 03/30 12:58
10F:→ Nobuta:ObjectAnimator.ofFloat(iv, View.TRANSLATION_X, 50); 03/30 12:58
11F:推 tac0wu:改动layout parameter 然後request layout有这样试过吗? 03/30 19:18
12F:→ Nobuta:我刚试用setMargins, 好像接近我的目的了 但是重复执行 03/31 01:24
13F:→ Nobuta:setMargins 移动的距离一直跟我设定的不一样 好困扰阿.... 03/31 01:26
14F:推 tac0wu:应该不会很复杂才对 有空帮你试试看 03/31 21:47
16F:→ tac0wu:这应该是你要的效果? 03/31 22:30