Android TweenアニメーションのRotateAnimationで画像が回転し続ける


この記事では、Androidでrotateを使用して画像を回転させる効果について説明します.Androidプラットフォームは、シーン内のオブジェクトを絶えず画像変換(平行移動、スケール、回転)することでアニメーション効果を生み出すTweenアニメーションの2種類のアニメーションを提供しています.2つ目はフレームアニメーションで、映画と同じように事前に作った画像を順番に再生します.本論文では,Tweenアニメーションのrotateによる回転効果を解析した.
 
新浪微博クライアントで各操作が進行中の場合activityの右上隅に回転し続けるアイコンがあり、リフレッシュのような効果があり、ユーザーに操作中のヒントを与える.この非モダリティなヒントは推奨されていますが、この効果をどのように実現するかを共有しましょう.
 
1、ImageViewを定義する
ImageViewを定義するのは、画像をロードするためであり、その画像はrotateによって回転するために使用され、他のViewでも使用できます.
リソースファイルは


   	
		

そのうちandroid:srcは画像内容であり、添付ファイルの画像を使用することができる.
JAvaコードは
ImageView infoOperatingIV = (ImageView)findViewById(R.id.infoOperating);

 
2、rotate回転効果の定義
res/animフォルダの下にtipを新規作成します.xmlファイル、内容は以下の通りです


    

0度から359度までのサイクル回転を意味し、0度から359度(360度で停止すると停止する)までの回転時間は500 ms、回転中心距離viewの左頂点は50%距離、viewの上辺から50%距離、すなわち正中心とし、各意味は以下の具体的な属性を参照して説明する.
JAvaコードは
Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.tip);
LinearInterpolator lin = new LinearInterpolator();
operatingAnim.setInterpolator(lin);

setInterpolatorは回転速度の設定を示します.LinearInterpolatorは均一速度効果、Accelerateinterpolatorは加速効果、DecelerateInterpolatorは減速効果、具体的には以下のandroid:interpolatorの紹介が見られます.
 
a.その中の属性の意味は以下の通りである(赤い部分に注意する):
android:fromDegrees開始角度度数
Android:toDegrees終了の角度度数、負数は反時計回り、正数は時計回りを表します.10周するとandroid:fromDegreesより3600大きくなります
android:pivotX回転中心のX座標
浮動小数点またはパーセンテージ.浮動小数点数はObjectの左端に対して、例えば5を表す.パーセンテージは、5%などのObjectに対する左端を表します.別のパーセンテージは、親コンテナに対する左縁、例えば5%pを表す.一般的に50%に設定するとObjectの中心に表示されます
Android:pivotY回転中心のY座標
浮動小数点またはパーセンテージ.浮動小数点数はObjectの上端に対して、例えば5を表す.パーセンテージは、5%などのObjectの上端に対して表示されます.別のパーセンテージは、親コンテナの上端に対して、例えば5%pを表す.一般的に50%に設定するとObjectの中心に表示されます
android:durationは、android:fromDegreesからandroid:toDegreesに回転するのにかかる時間をミリ秒単位で表します.速度の計算に使用できます.
Android:interpolatorは変化率を表しますが、実行速度ではありません.アニメーション効果を加速、減速、反復、バウンスなどに設定できる補間アトリビュート.デフォルトでは開始と終了が遅い中間速で、
android:startOffset start関数を呼び出した後に実行開始を待つ時間、単位はミリ秒、10であれば10 ms後に実行開始を示す
android:repeatCountの繰り返し回数、デフォルトは0、intでなければなりません.-1で停止しないことを表すことができます.
Android:repeatModeが繰り返すモードで、デフォルトはrestart、すなわちヘッダが再実行を開始し、reverseが終了から前方に再実行できる.Android:repeatCountが0より大きい場合、またはinfiniteの場合に有効です.
android:detachWallpaper壁紙で動作するかどうかを示します
android:zAdjustmentは、animatedされたコンテンツの実行時のz軸上の位置を表し、デフォルトはnormalです.
normalコンテンツの現在のz軸順序を保持
トップレベルでtop実行時に表示
bottom運転時最下層に表示
 
b.運転速度
運転速度は、運転時間(android:duration)を運転角度差(android:toDegrees-android:fromDegrees)で割ったもので、例えばandroid:durationは1000、android:toDegreesは360、android:fromDegreesは0で1秒回転1周を表す.
 
c.循環運転
android:fromDegrees="0"
android:toDegrees="360"
android:repeatCount="-1"

android:repeatCount="-1"はループ運転を表し、android:fromDegrees="0"android:toDegrees="360"は無停止を表す
 
3、回転の開始と停止
アクションの開始前に呼び出す
if (operatingAnim != null) {
	infoOperatingIV.startAnimation(operatingAnim);
}

操作完了時に呼び出す
infoOperatingIV.clearAnimation();

多くの友人は回転animationを停止する方法が分からないので、rotateを強制的に何回転させて操作を表すかを設定しますが、操作の実際の進捗と一致することはできません.実際には、上記のコードに示すようにanimationをクリアすればいいだけです.
 
 
その他:
上の回転に対して、(activityを再描画しないように設定されている)クロススクリーンで問題が発生します.すなわち、回転中心がずれ、アニメーションの回転が元の回転中心からずれることがあります.次のように解決する
@Override
public void onConfigurationChanged(Configuration newConfig) {

	super.onConfigurationChanged(newConfig);

	if (operatingAnim != null && infoOperatingIV != null && operatingAnim.hasStarted()) {
		infoOperatingIV.clearAnimation();
		infoOperatingIV.startAnimation(operatingAnim);
	}
}

 
 
属性は次のように参照できます.
http://developer.android.com/guide/topics/resources/animation-resource.html#rotate-element
http://developer.android.com/reference/android/view/animation/Animation.html#lattrs
 
アニメーションの詳細については
http://www.linuxgraphics.cn/animation/android_tween_animation.html
 
 
Android開発段階:
  • 私のマイクロブログTrinea、もっとタイムリーで全面的な技術を共有します!
  • Androidプラグイン化
  • Androidオープンソースライブラリ取得方法整理
  • VPN云梯推荐,合买每月只5元,全平台支持
  • Java Annotationおよびいくつかの一般的なオープンソースプロジェクトの注釈原理の概要
  • Android自動ラウンド無限ループのViewPager
  • Androidオープンソースプロジェクト要約
  • Android性能最適化総括
  • Androidライブラリ(キャッシュドロップダウンリストビューサイレントインストールなど)
  • Android ImageCacheピクチャキャッシュ
  • プルダウンリフレッシュおよびスクロールボトムにより多くのListviewをロード
  • を使用する.