Android Animation 360度旋转效果。

Crane023 2015-09-24 04:13:26
设有如下定义的动画。相关问题列在代码里。请教各路大神。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
layoutImg=(FrameLayout)findViewById(R.id.layoutimg);
animtest=AnimationUtils.loadAnimation(this, R.anim.animtest);
playMusic=(ImageButton)findViewById(R.id.playmusic);
playMusic.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
boolean flag=animtest.hasStarted(); //hasStarted()自从layoutImg.startAnimation后就一直返回true
Log.d(TAG, "play button clicked:"+flag);
if(!flag&&layoutImg!=null){
updateBtnView(true);
layoutImg.startAnimation(animtest);
Log.d(TAG, "play");
}else{
updateBtnView(false);
/*Question:
* 1、clearAnimation可以停止动画,但不是暂停,也就是说动画会回到起点,而不是停在当前旋转的角度。
* 2、clearAnimation后,animtest.hasStarted()仍然返回的true,请问怎样才能让它返回false?
*/
layoutImg.clearAnimation();
/*
* 以下两者皆无效
*/
// animtest.reset();
// animtest.cancel();
Log.d(TAG, "pause");
}

}

});

}



然后,动画定义如下。toDegrees设置过不同值。每次转完一圈后,总会有些停顿,不能做得无缝的流畅的那种效果。

<rotate
android:fromDegrees="0"
android:toDegrees="355"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:repeatCount="-1"
android:interpolator="@android:anim/linear_interpolator"
android:duration="4000"/>
...全文
348 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crane023 2015-09-27
  • 打赏
  • 举报
回复
引用 6 楼 Crane023 的回复:
[quote=引用 3 楼 dalor 的回复:] 问题1:你确定有看它的api吗?有pause方法,它停止就是这个,不需要stop。 问题2:停止当前角度,你可以去看api,找符合你的方法。是滞启动,它的api也有提供isStart方法。 问题3:没用过,所以,代码给你了,你就要去看它的api。
谢谢。 目前来看,它用pause()方法,可停在当前旋转的位置。但是,再用start()去启动,它又会恢复到原点位置重新启动,不能在暂停的位置启动。请问怎么办?[/quote] 用cancel()可完全取消,全为false; 用resume()可在原来的位置继续旋转。 谢谢dalor ! 谢谢dalor ! 谢谢dalor !
Crane023 2015-09-27
  • 打赏
  • 举报
回复
引用 3 楼 dalor 的回复:
问题1:你确定有看它的api吗?有pause方法,它停止就是这个,不需要stop。 问题2:停止当前角度,你可以去看api,找符合你的方法。是滞启动,它的api也有提供isStart方法。 问题3:没用过,所以,代码给你了,你就要去看它的api。
谢谢。 目前来看,它用pause()方法,可停在当前旋转的位置。但是,再用start()去启动,它又会恢复到原点位置重新启动,不能在暂停的位置启动。请问怎么办?
jklwan 2015-09-25
  • 打赏
  • 举报
回复

android:fromDegrees="0"
android:toDegrees="355"
android:toDegrees请改成360
qq343913906 2015-09-25
  • 打赏
  • 举报
回复
animation.setInterpolator(new LinearInterpolator()); 加这个
开发者_android 2015-09-25
  • 打赏
  • 举报
回复
问题1:你确定有看它的api吗?有pause方法,它停止就是这个,不需要stop。 问题2:停止当前角度,你可以去看api,找符合你的方法。是滞启动,它的api也有提供isStart方法。 问题3:没用过,所以,代码给你了,你就要去看它的api。
Crane023 2015-09-24
  • 打赏
  • 举报
回复
引用 1 楼 dalor 的回复:
ObjectAnimator rot = ObjectAnimator.ofFloat(toggleButton, "rotation", 0, 359);
rot.setInterpolator(new LinearInterpolator());
rot.setDuration(4000);
rot.setRepeatCount(-1);
rot.start()
;
ObjectAnimator好像没有pause()或者stop(),那怎么暂停和停止? 暂停要求停在当前角度而不回到起点。然后又怎么判断动画是否已启动? ObjectAnimator可以实现smooth地旋转,不做任何停顿吗?
开发者_android 2015-09-24
  • 打赏
  • 举报
回复
ObjectAnimator rot = ObjectAnimator.ofFloat(toggleButton, "rotation", 0, 359);
rot.setInterpolator(new LinearInterpolator());
rot.setDuration(4000);
rot.setRepeatCount(-1);
rot.start()
;

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧