Android开发RotateAnimation详解
(安卓开发技术课件)35动画讲解

// 设置动画的时间 mAnimationTranslate.setDuration(1000);
// 开始播放动画 image.startAnimation(mAnimationTranslate);
2. 使用AnimationUtils类的loadAnimation方法来获取Animation动 画对象,通过startAnimation方法开始播放动画。 Animation a=AnimationUtils.loadAnimation(this,R.anim.t) image.startAnimation(a);
平移效果动画
动画讲解
2. 在res/anim目录下新建一个xml文档 (t.xml)
<?xml version="1.0" encoding="utf-8"?> <translate
xmlns:android="/apk/res/android" android:fromXDelta="-100" android:toXDelta="360" android:fromYDelta="0" android:toYDelta="0" android:duration="3000"/>
麦子学院Android开发教程旋转动画效果实现方法

最近在网上发现一个很实用的例子,关于旋转动画效果的实现方法,转给大家分享下。
Main.java:Java代码1.public class Main extends Activity {2.3. private com.example.view.RoundSpinView mSelfView;4.5. /** Called when the activity is first created. */6. @Override7. public void onCreate(Bundle savedInstanceState) {8. super.onCreate(savedInstanceState);9. setContentView(yout.main);10. mSelfView = (com.example.view.RoundSpinView)findViewById(R.id.mSelfView);11. mSelfView.setmPointX(160);12. mSelfView.setmPointY(150);13. mSelfView.setmRadius(80);14. mSelfView.fixBoxPosition();15. }16.}17.复制代码自定义View,实现旋转动画:RoundSpinView.java:Java代码1.public class RoundSpinView extends View {2.3. private Paint mPaint = new Paint();4. private static final int STONE_COUNT = 4;5. /** 4张图片分布的角度均值 */6. private int mDegreeDelta;7. private float mDown_x, mDown_y;8.9. private int[] mResourceId = { R.drawable.customer, R.drawable.product,10. R.drawable.order, };11.12. public RoundSpinView(Context context, AttributeSet attrs) {13. super(context, attrs);14. mPaint.setColor(Color.RED);15. mPaint.setStrokeWidth(2);16. setupStones();17. computeCoordinates();18. }19.20. /** 初始化每个旋转图片的坐标位置及图片资源 */21. private void setupStones() {22. mStones = new BigStone[STONE_COUNT];23. BigStone stone;24. int angle = 0;25. mDegreeDelta = 360 / STONE_COUNT;26.27. for (int index = 0; index < STONE_COUNT; index++) {28. stone = new BigStone();29. stone.angle = angle;30. stone.bitmap = BitmapFactory.decodeResource(getResources(),31. mResourceId[index]);32. angle += mDegreeDelta;33. mStones[index] = stone;34. }35. }36.37. /** 计算每个旋转图片坐标 */38. private void computeCoordinates() {39. BigStone stone;40. for (int index = 0; index < STONE_COUNT; index++) {41. stone = mStones[index];42. if (stone.angle >= 360) {43. stone.angle -= 360;44. }45. stone.x = mPointX46. + (float) (mRadius * Math.cos(stone.angle * Math.PI /180));47. stone.y = mPointY48. + (float) (mRadius * Math.sin(stone.angle * Math.PI /180));49. }50. }51.52. public RoundSpinView(Context context) {53. super(context);54. }55.56. private BigStone[] mStones;57.58. /** 旋转的中心点 */59. private int mPointX = 0, mPointY = 0;60. /** 旋转半径 */61. private int mRadius = 0;62.63. private int[] mInts = new int[] { 0, 0, 0, 0 };64. /** 标识那个图片应该位于正中间 */65. private int mIn;66.67. public int getmRadius() {68. return mRadius;69. }70.71. public void setmRadius(int mRadius) {72. this.mRadius = mRadius;73. }74.75. public int getmPointX() {76. return mPointX;77. }78.79. public void setmPointX(int mPointX) {80. this.mPointX = mPointX;81. }82.83. public int getmPointY() {84. return mPointY;85. }86.87. public void setmPointY(int mPointY) {88. this.mPointY = mPointY;89. }90.91. /** Sort the elements in one array. */92. public static void sort(int[] data) {93. int len = data.length;94. for (int i = 0; i < len - 1; i++) {95. int temp = 0;96. boolean isExchanged = false;97. for (int j = len - 1; j > i; j--) {98. if (data[j] < data[j - 1]) {99. temp = data[j];100. data[j] = data[j - 1];101. data[j - 1] = temp;102. /** 发生了交换,故将交换标志置为真 */ 103. isExchanged = true;104. }105. }106. /** 本趟排序未发生交换,提前终止算法,提高效率 */ 107. if (!isExchanged) {108. return;109. }110. }111. }112.113. public void fixBoxPosition() {114. for (int i = 0; i < 4; i++) {115. mInts[i] = Math.abs(mStones[i].angle - 90); 116. }117. RoundSpinView.sort(mInts);118. for (int i = 0; i < 4; i++) {119. if (Math.abs(mStones[i].angle - 90) == mInts[0]) { 120. mIn = i;121. break;122. }123. }124. int mO = 0;125. do {126. mStones[mIn].angle = mO * 90 + 90;127. mIn++;128. if (mIn == 4) {129. mIn = 0;130. }131. mO++;132. } while (mO < 4);133. computeCoordinates();134. invalidate();135. }136.137. public void catchClickEvent(float mX, float mY) {138. System.out.println("mDown_x__________" + mDown_x);139. System.out.println("mDown_y__________" + mDown_y);140. for (int i = 0; i < mStones.length; i++) {141. if (mStones[i].angle == 90) {142. mStones[i].bitmap = BitmapFactory.decodeResource( 143. getResources(), R.drawable.icon);144. }145. }146. invalidate();147. }148.149. @Override150. public boolean dispatchTouchEvent(MotionEvent event) {151. switch (event.getAction()) {152. case MotionEvent.ACTION_DOWN:153. mDown_x = event.getX();154. mDown_y = event.getY();155. // catchClickEvent(mDown_x, mDown_y);156. break;157. case MotionEvent.ACTION_MOVE:158. float mDistance_x = event.getX() - mDown_x;159. float mDistance_y = event.getY() - mDown_y;160. computeAngle(mDistance_x, mDistance_y);161. computeCoordinates();162. invalidate();163. break;164. case MotionEvent.ACTION_UP:165. fixBoxPosition();166. break;167. }168. return true;169. }170.171. public void computeAngle(float mX, float mY) {172. int angle = (int) (mX * 0.1);173. if (mX < 0) {174. for (int index = 0; index < STONE_COUNT; index++) { 175. mStones[index].angle = mStones[index].angle - angle; 176. }177. } else if (mX > 0) {178. for (int index = 0; index < STONE_COUNT; index++) { 179. mStones[index].angle = mStones[index].angle - angle; 180. }181. }182. }183.184. /** 计算一次滑动的角度 */185. public int computeCurrentAngle(float x, float y) {186. float distance = (float) Math187. .sqrt(((x - mPointX) * (x - mPointX) + (y - mPointY) 188. * (y - mPointY)));189. int degree = (int) (Math.acos((x - mPointX) / distance) * 180 / Math.PI);190. return degree;191. }192.193. @Override194. public void onDraw(Canvas canvas) {195. canvas.drawPoint(mPointX, mPointY, mPaint);196.197. for (int index = 0; index < STONE_COUNT; index++) {198. if (!mStones[index].isVisible)199. continue;200. drawInCenter(canvas, mStones[index].bitmap, mStones[index].x,201. mStones[index].y);202. // 不想有红线,就注掉下面这句203. // canvas.drawLine(mPointX, mPointY, mStones[index].x, 204. // mStones[index].y, mPaint);205. }206. }207.208. /**209. * 把中心点放到中心处210. *211. * @param canvas212. * @param bitmap213. * @param left214. * @param top215. */216. void drawInCenter(Canvas canvas, Bitmap bitmap, float left, float top) {217. canvas.drawPoint(left, top, mPaint);218. canvas.drawBitmap(bitmap, left - bitmap.getWidth() / 2,219. top - bitmap.getHeight() / 2, null);220. }221.222. class BigStone {223. Bitmap bitmap;224. int angle;225. float x;226. float y;227. boolean isVisible = true;228. }229.}230.复制代码代码有点长,各位可以建个工程运行看下效果.main.xml:Java代码1.<?xml version="1.0" encoding="utf-8"?>2.<RelativeLayoutxmlns:android="/apk/res/android"3. android:layout_width="fill_parent" android:layout_height="fill_parent"4. android:background="@drawable/bg">5. <TextView android:layout_width="fill_parent"6. android:layout_height="wrap_content" android:text="Theanimation is solved." />7. <com.example.view.RoundSpinView8. android:layout_width="320dp" android:layout_height="300dp"android:id="@+id/mSelfView"9. android:layout_alignParentBottom="true" />10.</RelativeLayout>11.复制代码如需了解更多相关知识,请至麦子学院官网查询(/)。
android 渐变透明、伸缩、平移、旋转动画效果

android 渐变透明、伸缩、平移、旋转动画效果import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.KeyEvent;import android.view.View;import android.view.animation.AlphaAnimation;import android.view.animation.Animation;import android.view.animation.RotateAnimation;import android.view.animation.ScaleAnimation;import android.view.animation.TranslateAnimation;/**•@AlphaAnimation 渐变透明度动画效果•@ScaleAnimation 渐变尺寸伸缩动画效果•@TranslateAnimation 画面转换位置移动动画效果•@RotateAnimation 画面转移旋转动画效果•*/•public class MyViewAnimation extends View {• private Paint paint;• private Bitmap bmp;• private int x = 50;• private Animation mAlphaAnimation;• private Animation mScaleAnimation;• private Animation mTranslateAnimation;• private Animation mRotateAnimation;•public MyViewAnimation(Context context) {super(context);paint = new Paint();paint.setAntiAlias(true);bmp = BitmapFactory.decodeResource(getResources(),R.drawable.icon);this.setFocusable(true);// 只有当该View获得焦点时才会调用onKeyDown方法}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.BLACK);paint.setColor(Color.WHITE);canvas.drawText("Himi", x, 50, paint);// 备注1canvas.drawText("方向键↑ 渐变透明度动画效果", 80,this.getHeight() - 80, paint);canvas.drawText("方向键↓ 渐变尺寸伸缩动画效果", 80,this.getHeight() - 60, paint);canvas.drawText("方向键← 画面转换位置移动动画效果", 80, this.getHeight() - 40, paint);canvas.drawText("方向键→ 画面转移旋转动画效果", 80,this.getHeight() - 20, paint);canvas.drawBitmap(bmp, this.getWidth() / 2- bmp.getWidth() / 2,this.getHeight() / 2- bmp.getHeight() / 2, paint); x += 1;}public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {// 渐变透明度动画效果mAlphaAnimation = new AlphaAnimation(0.1f, 1.0f);// 第一个参数fromAlpha 为动画开始时候透明度// 第二个参数toAlpha 为动画结束时候透明度// 注意:取值范围[0-1];[完全透明-完全不透明]mAlphaAnimation.setDuration(3000);// //设置时间持续时间为3000 毫秒=3秒this.startAnimation(mAlphaAnimation);} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {// 渐变尺寸伸缩动画效果mScaleAnimation = new ScaleAnimation(0.0f, 2.0f, 1.5f, 1.5f,Animation.RELATIVE_TO_PARENT, 0.5f,Animation.RELATIVE_TO_PARENT, 0.0f);// 第一个参数fromX为动画起始时X坐标上的伸缩尺寸// 第二个参数toX为动画结束时X坐标上的伸缩尺寸// 第三个参数fromY为动画起始时Y坐标上的伸缩尺寸// 第四个参数toY 为动画结束时Y 坐标上的伸缩尺寸// 注意:// 0.0表示收缩到没有// 1.0表示正常无伸缩// 值小于1.0表示收缩// 值大于1.0表示放大// -----我这里1-4参数表明是起始图像大小不变,动画终止的时候图像被放大1.5倍// 第五个参数pivotXType 为动画在X 轴相对于物件位置类型// 第六个参数pivotXValue 为动画相对于物件的X 坐标的开始位置// 第七个参数pivotXType 为动画在Y 轴相对于物件位置类型// 第八个参数pivotYValue 为动画相对于物件的Y 坐标的开始位置// 提示:位置类型有三种,每种效果大家自己尝试哈~这里偷下懒~ // 毕竟亲眼看到效果的区别才记忆深刻~// Animation.ABSOLUTE// 、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENTmScaleAnimation.setDuration(2000);this.startAnimation(mScaleAnimation);} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {// 画面转换位置移动动画效果mTranslateAnimation = new TranslateAnimation(0, 100, 0, 100);// 第一个参数fromXDelta为动画起始时X坐标上的移动位置// 第二个参数toXDelta为动画结束时X坐标上的移动位置// 第三个参数fromYDelta为动画起始时Y坐标上的移动位置// 第四个参数toYDelta 为动画结束时Y 坐标上的移动位置mTranslateAnimation.setDuration(2000);this.startAnimation(mTranslateAnimation);} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {// 画面转移旋转动画效果mRotateAnimation = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);// 第一个参数fromDegrees为动画起始时的旋转角度// 第二个参数toDegrees 为动画旋转到的角度// 第三个参数pivotXType 为动画在X 轴相对于物件位置类型// 第四个参数pivotXValue 为动画相对于物件的X 坐标的开始位置// 第五个参数pivotXType 为动画在Y 轴相对于物件位置类型// 第六个参数pivotYValue 为动画相对于物件的Y 坐标的开始位置mRotateAnimation.setDuration(3000);this.startAnimation(mRotateAnimation);}return super.onKeyDown(keyCode, event);}}</pre>。
Animation 动画专题研究 一

Android 开发笔记动画效果 --Animation 动画专题研究一动画类型Android的animation由四种类型组成XML中alpha 渐变透明度动画效果scale 渐变尺寸伸缩动画效果translate 画面转换位置移动动画效果rotate 画面转移旋转动画效果JavaCode中AlphaAnimation 渐变透明度动画效果ScaleAnimation 渐变尺寸伸缩动画效果TranslateAnimation 画面转换位置移动动画效果RotateAnimation 画面转移旋转动画效果Android动画模式Animation主要有两种动画模式:一种是tweened animation(渐变动画)XML中 JavaCodealpha AlphaAnimationscale ScaleAnimation一种是frame by frame(画面转换动画)XML中 JavaCodetranslate TranslateAnimationrotate RotateAnimation如何在XML文件中定义动画①打开Eclipse,新建Android工程②在res目录中新建anim文件夹③在anim目录中新建一个myanim.xml(注意文件名小写)④加入XML的动画代码1. <?xml version="1.0" encoding="utf-8"?>2. <set xmlns:android="">3. <alpha/>4. <scale/>5. <translate/>6. <rotate/>7. </set>复制代码Android动画分析--XML<alpha>1. <?xml version="1.0" encoding="utf-8"?>2. <set xmlns:android="" >3. <alpha4. android:fromAlpha="0.1"5. android:toAlpha="1.0"6. android:duration="3000"7. />8. <!-- 透明度控制动画效果 alpha9. 浮点型值:10. fromAlpha 属性为动画起始时透明度11. toAlpha 属性为动画结束时透明度12. 说明:13. 0.0表示完全透明14. 1.0表示完全不透明15. 以上值取0.0-1.0之间的float数据类型的数字16.17. 长整型值:18. duration 属性为动画持续时间19. 说明:20. 时间以毫秒为单位21. -->22. </set>复制代码<scale>1. <?xml version="1.0" encoding="utf-8"?>2. <set xmlns:android="">3. <scale4. android:interpolator=5. "@android:anim/accelerate_decelerate_interpolator"6. android:fromXScale="0.0"7. android:toXScale="1.4"8. android:fromYScale="0.0"9. android:toYScale="1.4"10. android:pivotX="50%"11. android:pivotY="50%"12. android:fillAfter="false"13. android:duration="700" />14. </set>15. <!-- 尺寸伸缩动画效果 scale16. 属性:interpolator 指定一个动画的插入器17. 在我试验过程中,使用android.res.anim中的资源时候发现18. 有三种动画插入器:19. accelerate_decelerate_interpolator 加速-减速动画插入器20. accelerate_interpolator 加速-动画插入器21. decelerate_interpolator 减速- 动画插入器22. 其他的属于特定的动画效果23. 浮点型值:24.25. fromXScale 属性为动画起始时 X坐标上的伸缩尺寸26. toXScale 属性为动画结束时 X坐标上的伸缩尺寸27.28. fromYScale 属性为动画起始时Y坐标上的伸缩尺寸29. toYScale 属性为动画结束时Y坐标上的伸缩尺寸30.31. 说明:32. 以上四种属性值33.34. 0.0表示收缩到没有35. 1.0表示正常无伸缩36. 值小于1.0表示收缩37. 值大于1.0表示放大38.39. pivotX 属性为动画相对于物件的X坐标的开始位置40. pivotY 属性为动画相对于物件的Y坐标的开始位置41.42. 说明:43. 以上两个属性值从0%-100%中取值44. 50%为物件的X或Y方向坐标上的中点位置45.46. 长整型值:47. duration 属性为动画持续时间48. 说明: 时间以毫秒为单位49.50. 布尔型值:51. fillAfter 属性当设置为true ,该动画转化在动画结束后被使用52. -->复制代码<translate>1. <?xml version="1.0" encoding="utf-8"?>2. <set xmlns:android="">3. <translate4. android:fromXDelta="30"5. android:toXDelta="-80"6. android:fromYDelta="30"7. android:toYDelta="300"8. android:duration="2000"9. />10. <!-- translate 位置转移动画效果11. 整型值:12. fromXDelta 属性为动画起始时 X坐标上的位置13. toXDelta 属性为动画结束时 X坐标上的位置14. fromYDelta 属性为动画起始时 Y坐标上的位置15. toYDelta 属性为动画结束时 Y坐标上的位置16. 注意:17. 没有指定fromXType toXType fromYType toYType 时候,18. 默认是以自己为相对参照物19. 长整型值:20. duration 属性为动画持续时间21. 说明: 时间以毫秒为单位22. -->23. </set>复制代码<rotate>1. <?xml version="1.0" encoding="utf-8"?>2. <set xmlns:android="">3. <rotate4.android:interpolator="@android:anim/accelerate_decelerate_inter polator"5. android:fromDegrees="0"6. android:toDegrees="+350"7. android:pivotX="50%"8. android:pivotY="50%"9. android:duration="3000" />10. <!-- rotate 旋转动画效果11. 属性:interpolator 指定一个动画的插入器12. 在我试验过程中,使用android.res.anim中的资源时候发现13. 有三种动画插入器:14. accelerate_decelerate_interpolator 加速-减速动画插入器15. accelerate_interpolator 加速-动画插入器16. decelerate_interpolator 减速- 动画插入器17. 其他的属于特定的动画效果18.19. 浮点数型值:20. fromDegrees 属性为动画起始时物件的角度21. toDegrees 属性为动画结束时物件旋转的角度可以大于360度22.23.24. 说明:25. 当角度为负数——表示逆时针旋转26. 当角度为正数——表示顺时针旋转27. (负数from——to正数:顺时针旋转)28. (负数from——to负数:逆时针旋转)29. (正数from——to正数:顺时针旋转)30. (正数from——to负数:逆时针旋转)31.32. pivotX 属性为动画相对于物件的X坐标的开始位置33. pivotY 属性为动画相对于物件的Y坐标的开始位置34.35. 说明: 以上两个属性值从0%-100%中取值36. 50%为物件的X或Y方向坐标上的中点位置37.38. 长整型值:39. duration 属性为动画持续时间40. 说明: 时间以毫秒为单位41. -->42. </set>复制代码如何使用XML中的动画效果1. public static Animation loadAnimation (Context context, int id)2. //第一个参数Context为程序的上下文3. //第二个参数id为动画XML文件的引用4. //例子:5. myAnimation=AnimationUtils.loadAnimation(this,R.anim.my_action);6. //使用AnimationUtils类的静态方法loadAnimation()来加载XML 中的动画XML文件复制代码如何在Java代码中定义动画1. //在代码中定义动画实例对象2. private Animation myAnimation_Alpha;3. private Animation myAnimation_Scale;4. private Animation myAnimation_Translate;5. private Animation myAnimation_Rotate;6.7. //根据各自的构造方法来初始化一个实例对象8. myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);9.10. myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,11. Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);12.13. myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);14.15. myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,16.Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);复制代码Android动画分析--JavaCodeAlphaAnimation①AlphaAnimation类对象定义1. private AlphaAnimation myAnimation_Alpha;复制代码②AlphaAnimation类对象构造1. AlphaAnimation(float fromAlpha, float toAlpha)2. //第一个参数fromAlpha为动画开始时候透明度3. //第二个参数toAlpha为动画结束时候透明度4. myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);5. //说明:6. // 0.0表示完全透明7. // 1.0表示完全不透明复制代码③设置动画持续时间1. myAnimation_Alpha.setDuration(5000);2. //设置时间持续时间为 5000毫秒复制代码ScaleAnimation①ScaleAnimation类对象定义1. private AlphaAnimation myAnimation_Alpha;复制代码②ScaleAnimation类对象构造1. ScaleAnimation(float fromX, float toX, float fromY, float toY,2. int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)3. //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸4. //第二个参数toX为动画结束时 X坐标上的伸缩尺寸5. //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸6. //第四个参数toY为动画结束时Y坐标上的伸缩尺寸7. /*说明:8. 以上四种属性值9. 0.0表示收缩到没有10. 1.0表示正常无伸缩11. 值小于1.0表示收缩12. 值大于1.0表示放大13. */14. //第五个参数pivotXType为动画在X轴相对于物件位置类型15. //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置16. //第七个参数pivotXType为动画在Y轴相对于物件位置类型17. //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置18. myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,19. Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);复制代码③设置动画持续时间1. myAnimation_Scale.setDuration(700);2. //设置时间持续时间为 700毫秒复制代码TranslateAnimation①TranslateAnimation类对象定义1. private AlphaAnimation myAnimation_Alpha;复制代码②TranslateAnimation类对象构造1. TranslateAnimation(float fromXDelta, float toXDelta,2. float fromYDelta, float toYDelta)3. //第一个参数fromXDelta为动画起始时 X坐标上的移动位置4. //第二个参数toXDelta为动画结束时 X坐标上的移动位置5. //第三个参数fromYDelta为动画起始时Y坐标上的移动位置6. //第四个参数toYDelta为动画结束时Y坐标上的移动位置复制代码③设置动画持续时间1. myAnimation_Translate.setDuration(2000);2. //设置时间持续时间为 2000毫秒复制代码RotateAnimation①RotateAnimation类对象定义1. private AlphaAnimation myAnimation_Alpha;复制代码②RotateAnimation类对象构造1. RotateAnimation(float fromDegrees, float toDegrees,2. int pivotXType, float pivotXValue, int pivotYType, floatpivotYValue)3. //第一个参数fromDegrees为动画起始时的旋转角度4. //第二个参数toDegrees为动画旋转到的角度5. //第三个参数pivotXType为动画在X轴相对于物件位置类型6. //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置7. //第五个参数pivotXType为动画在Y轴相对于物件位置类型8. //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置9. myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,10.Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);复制代码③设置动画持续时间1. myAnimation_Rotate.setDuration(3000);2. //设置时间持续时间为 3000毫秒复制代码如何使用Java代码中的动画效果使用从View父类继承过来的方法startAnimation()来为View或是子类View等等添加一个动画效果1. public void startAnimation (Animation animation)。
Android开发RotateAnimation详解

android中提供了如下4种动画效果:1、AlphaAnimation 透明度动画效果2、ScaleAnimation 缩放动画效果3、TranslateAnimation 位移动画效果4、RotateAnimation 旋转动画效果今天主要讲解RotateAnimation 旋转动画效果的实现方法。
RotateAnimation 参数有:float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue分别是:float fromDegrees:旋转的开始角度。
float toDegrees:旋转的结束角度。
int pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float pivotXValue:X坐标的伸缩值。
int pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float pivotYValue:Y坐标的伸缩值。
代码示例:public class MainActivity extends Activity {ImageView image;Button start;Button cancel;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);image = (ImageView) findViewById(R.id.main_img);start = (Button) findViewById(R.id.main_start);cancel = (Button) findViewById(R.id.main_cancel);/** 设置旋转动画 */final RotateAnimation animation =newRotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);animation.setDuration(3000);//设置动画持续时间/** 常用方法 *///animation.setRepeatCount(int repeatCount);//设置重复次数//animation.setFillAfter(boolean);//动画执行完后是否停留在执行完的状态//animation.setStartOffset(long startOffset);//执行前的等待时间start.setOnClickListener(new OnClickListener() {public void onClick(View arg0) {image.setAnimation(animation);/** 开始动画 */animation.startNow();}});cancel.setOnClickListener(new OnClickListener() {public void onClick(View v) {/** 结束动画 */animation.cancel();}});}}更多android视频学习教程,请至麦子学院官网查看>>/course/2/。
android图片3d旋转

看到很多人在问如何实现三维的翻转效果,所以今天在这里简单的给大家分析一下,其实在APIDemo中就有这样一个例子,那么我们就以其为例来学习Android中的翻转动画效果的实现,首先看一下运行效果如下图所示。
Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,那么我们首先来分析一下Animation 和Transformation。
Animation动画的主要接口,其中主要定义了动画的一些属性比如开始时间,持续时间,是否重复播放等等。
而Transformation中则包含一个矩阵和alpha值,矩阵是用来做平移,旋转和缩放动画的,而alpha值是用来做alpha动画的,要实现3D旋转动画我们需要继承自Animation类来实现,我们需要重载getTransformation和applyTransformation,在getTransformation中Animation会根据动画的属性来产生一系列的差值点,然后将这些差值点传给applyTransformation,这个函数将根据这些点来生成不同的Transformation。
下面是具体实现:1.public class Rotate3dAnimation extends Animation {2.//开始角度3. private final float mFromDegrees;4.//结束角度5. private final float mToDegrees;6.//中心点7. private final float mCenterX;8. private final float mCenterY;9. private final float mDepthZ;10.//是否需要扭曲11. private final boolean mReverse;12.//摄像头13. private Camera mCamera;14. public Rotate3dAnimation(float fromDegrees, float toDegrees,15. float centerX, float centerY, float depthZ, boolean reverse) {16. mFromDegrees = fromDegrees;17. mToDegrees = toDegrees;18. mCenterX = centerX;19. mCenterY = centerY;20. mDepthZ = depthZ;21. mReverse = reverse;22. }23.24. @Override25. public void initialize(int width, int height, int parentWidth, int parentHeight) {26. super.initialize(width, height, parentWidth, parentHeight);27. mCamera = new Camera();28. }29.//生成Transformation30. @Override31. protected void applyTransformation(float interpolatedTime, Transformation t) {32. final float fromDegrees = mFromDegrees;33.//生成中间角度34. float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);35.36. final float centerX = mCenterX;37. final float centerY = mCenterY;38. final Camera camera = mCamera;39.40. final Matrix matrix = t.getMatrix();41.42. camera.save();43. if (mReverse) {44. camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);45. } else {46. camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));47. }48. camera.rotateY(degrees);49.//取得变换后的矩阵50. camera.getMatrix(matrix);51. camera.restore();52.53. matrix.preTranslate(-centerX, -centerY);54. matrix.postTranslate(centerX, centerY);55. }56.}其中包括了旋转的开始和结束角度,中心点、是否扭曲、和一个Camera,这里我们主要分析applyTransformation函数,其中第一个参数就是通过getTransformation函数传递的差指点,然后我们根据这个差值通过线性差值算法计算出一个中间角度degrees,Camera 类是用来实现绕Y轴旋转后透视投影的,因此我们首先通过t.getMatrix()取得当前的矩阵,然后通过camera.translate来对矩阵进行平移变换操作,camera.rotateY进行旋转。
Android强制设置屏幕旋转方向Forcerotation

Android强制设置屏幕旋转⽅向Forcerotation 第⼀种⽅法:⾸先检查有没有权限,没有就去申请。
申请时会触发frameworks/base/services/core/java/com/android/server/wm/AlertWindowNotification.java⾥⾯弹出可以覆盖view的权限窗⼝。
检查和处理的code如下:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){if (!Settings.canDrawOverlays(this)){Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:" + getPackageName()));startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);return;}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data){if (requestCode == OVERLAY_PERMISSION_REQ_CODE){if (Settings.canDrawOverlays(this)){//Already has permission}}}实际去锁定旋转和恢复的code如下:public final static int STATE_DEFAULT = 0;public final static int STATE_PORTRAIT = 1;public final static int STATE_LANDSCAPE = 8;WindowManager mWindowManager;View mView;youtParams lp;mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);int iFlags = youtParams.FLAG_LAYOUT_IN_SCREEN |youtParams.FLAG_WATCH_OUTSIDE_TOUCH |youtParams.FLAG_NOT_TOUCH_MODAL |youtParams.FLAG_NOT_FOCUSABLE |youtParams.FLAG_SHOW_WHEN_LOCKED;lp = new youtParams(youtParams.MATCH_PARENT,youtParams.MATCH_PARENT,youtParams.TYPE_SYSTEM_OVERLAY,iFlags,PixelFormat.TRANSLUCENT);mView = new View(this);switch (rotation){//Normal Operationcase MainActivity.STATE_DEFAULT:if (mAdded == true) mWindowManager.removeView(mView);mAdded = false;break;//Force Rotationcase MainActivity.STATE_LANDSCAPE:case MainActivity.STATE_PORTRAIT:lp.screenOrientation = rotation;if (mAdded == false){mWindowManager.addView(mView, lp);mAdded = true;}else{mWindowManager.updateViewLayout(mView, lp);}break;}上⾯的⽅法在添加system权限后,可以直接获得权限,不再需要申请。
1---Android的动画animation

Android动画模式
Animation主要有两种动画模式:
补间动画tween animation:开发者只需要制定动画开始、动画结束的关键帧,而动画变化的中间帧由系统计算并补齐。
逐帧动画frame animation:开发者把动画过程的每张静态图片都收集起来,然后由android来控制依次显示这些静态图片,然后利用人眼的“视觉暂停”的原理,给用户造成动画的错觉。
(就与放电影的原理一样)
一种是tween animation(渐变动画或者补间动画)
XML中JavaCode
alpha渐变透明度动画效果AlphaAnimation渐变透明度动画效果
scale渐变尺寸伸缩动画效果ScaleAnimation渐变尺寸伸缩动画效果
translate画面转换位置移动动画效果TranslateAnimation 画面转换位置移动动画效果
rotate画面转移旋转动画效果RotateAnimation画面转移旋转动画效果
一种是frame by frame(帧动画)
translate画面转换位置移动动画效果TranslateAnimation 画面转换位置移动动画效果
rotate画面转移旋转动画效果RotateAnimation画面转移旋转动画效果
二:代码实现:
1:在XML中实现tween animation:
2:在javaCode中实现tween animation:3:在XML中实现frame animation:
4:在javaCode中实现frame animation:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
android中提供了如下4种动画效果:
1、AlphaAnimation 透明度动画效果
2、ScaleAnimation 缩放动画效果
3、TranslateAnimation 位移动画效果
4、RotateAnimation 旋转动画效果
今天主要讲解RotateAnimation 旋转动画效果的实现方法。
RotateAnimation 参数有:float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue
分别是:
float fromDegrees:旋转的开始角度。
float toDegrees:旋转的结束角度。
int pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float pivotXValue:X坐标的伸缩值。
int pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float pivotYValue:Y坐标的伸缩值。
代码示例:
public class MainActivity extends Activity {
ImageView image;
Button start;
Button cancel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.activity_main);
image = (ImageView) findViewById(R.id.main_img);
start = (Button) findViewById(R.id.main_start);
cancel = (Button) findViewById(R.id.main_cancel);
/** 设置旋转动画 */
final RotateAnimation animation =new
RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,
0.5f,Animation.RELATIVE_TO_SELF,0.5f);
animation.setDuration(3000);//设置动画持续时间
/** 常用方法 */
//animation.setRepeatCount(int repeatCount);//设置重复次数
//animation.setFillAfter(boolean);//动画执行完后是否停留在执行完的状态
//animation.setStartOffset(long startOffset);//执行前的等待时间
start.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
image.setAnimation(animation);
/** 开始动画 */
animation.startNow();
}
});
cancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
/** 结束动画 */
animation.cancel();
}
});
}
}
更多android视频学习教程,请至麦子学院官网查看>>/course/2/。