多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 第十二天.Android动画技术 ## ### 12.1 Tween动画 ### #### 12.1.1 动画实现 #### + Tween动画 对场景中的对象不断进行图像变换,如平移、缩放、旋转。 + Frame帧动画 顺序播放事先做好的图像,如电影。 + GIF动画 #### 12.1.2 代码实现Tween动画1 #### ``` /* 装载资源 */ Bitmap mBitQQ mBitQQ = ((BitmapDrawable)getResources().getDrawable(R.drawable.qq)).getBitmap(); /* 绘制图片 */ canvas.drawBitmap(mBitQQ, 0, 0, null); /* 创建Alpha动画 */ private Animation mAnimationAlpha = newAlphaAnimation(0.1f, 1.0f); /* 设置动画的时间 */ mAnimationAlpha.setDuration(3000); /* 开始播放动画 */ this.startAnimation(mAnimationAlpha); /* 创建Scale动画 */ private Animation mAnimationScale =newScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f); /* 设置动画的时间 */ mAnimationScale.setDuration(500); /* 开始播放动画 */ this.startAnimation(mAnimationScale); ``` #### 12.1.3 代码实现Tween动画2 #### ``` /* 创建Translate动画 */ private Animation mAnimationTranslate =new TranslateAnimation(10, 100,10, 100); /* 设置动画的时间 */ mAnimationTranslate.setDuration(1000); /* 开始播放动画 */ this.startAnimation(mAnimationTranslate); /* 创建Rotate动画 */ private Animation mAnimationRotate =newRotateAnimation(0.0f, +360.0f,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f); /* 设置动画的时间 */ mAnimationRotate.setDuration(1000); /* 开始播放动画 */ this.startAnimation(mAnimationRotate); ``` #### 12.2.4 代码实现Tween动画:main.xml #### ``` <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/AlphaAnimation" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Alpha动画"/> <Button android:id="@+id/ScaleAnimation" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Scale动画"/> <Button android:id="@+id/TranslateAnimation" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Translate动画"/> <Button android:id="@+id/RotateAnimation" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Rotate动画"/> </LinearLayout> ``` #### 12.2.5 XML布局实现Tween动画 #### ``` /* 装载动画布局 */ mAnimationAlpha =AnimationUtils.loadAnimation(mContext,R.anim.alpha_animation); /* 开始播放动画 */ this.startAnimation(mAnimationAlpha); /* 装载动画布局 */ mAnimationScale =AnimationUtils.loadAnimation(mContext,R.anim.scale_animation); this.startAnimation(mAnimationScale); /* 装载动画布局 */ mAnimationTranslate =AnimationUtils.loadAnimation(mContext,R.anim.translate_animation); this.startAnimation(mAnimationTranslate); /* 装载动画布局 */ mAnimationRotate =AnimationUtils.loadAnimation(mContext,R.anim.rotate_animation); this.startAnimation(mAnimationRotate); ``` **R.anim.alpha_animation** ``` <setxmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="2000" /> </set> ``` **R.anim.scale_animation** ``` <setxmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="500" /> </set> ``` **R.anim.translate_animation** ``` <setxmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="10" android:toXDelta="100" android:fromYDelta="10" android:toYDelta="100" android:duration="1000" /> </set> ``` **R.anim.rotate_animation** ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromDegrees="0" android:toDegrees="+360" android:pivotX="50%" android:pivotY="50%" android:duration="1000" /> </set> ``` 案例AnimationDemo2 ### 12.2 Frame帧动画 ### #### 12.2.1 代码实现Frame动画 #### ``` /* 实例化AnimationDrawable对象 */ private AnimationDrawable frameAnimation = newAnimationDrawable(); /*装载资源 */ //这里用一个循环了装载所有名字类似的资源,如“a1.......15.png”的图片 for(int i = 1; i <= 15; i++){ intid = getResources().getIdentifier("a" + i, "drawable", mContext.getPackageName()); Drawable mBitAnimation =getResources().getDrawable(id); /*为动画添加一帧 */ //参数mBitAnimation是该帧的图片 //参数500是该帧显示的时间,按毫秒计算 frameAnimation.addFrame(mBitAnimation,500); } /*设置播放模式是否循环false表示循环而true表示不循环 */ frameAnimation.setOneShot(false ); /*设置本类将要显示这个动画 */ this.setBackgroundDrawable(frameAnimation); /*开始播放动画 */ frameAnimation.start(); ``` 案例AnimationDrawableDemo #### 12.2.2 XML实现Frame动画 #### ``` /* 定义AnimationDrawable动画对象 */ private AnimationDrawable frameAnimation= null; /* 定义一个ImageView用来显示动画 */ ImageView img = new ImageView(mContext); /* 装载动画布局文件 */ img.setBackgroundResource(R.anim.frameanimation); /* 构建动画 */ private AnimationDrawable frameAnimation= (AnimationDrawable) img.getBackground(); /* 设置是否循环 */ frameAnimation.setOneShot( false ); /* 设置该类显示的动画 */ this.setBackgroundDrawable(frameAnimation); /* 开始播放动画 */ frameAnimation.start(); ``` **frameanimation.xml** ``` <animation-listxmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/a1"android:duration="500" /> <item android:drawable="@drawable/a2"android:duration="500" /> <item android:drawable="@drawable/a3"android:duration="500" /> <item android:drawable="@drawable/a4"android:duration="500" /> <item android:drawable="@drawable/a5"android:duration="500" /> <item android:drawable="@drawable/a6"android:duration="500" /> <item android:drawable="@drawable/a7"android:duration="500" /> <item android:drawable="@drawable/a8"android:duration="500" /> <item android:drawable="@drawable/a9"android:duration="500" /> <item android:drawable="@drawable/a10"android:duration="500" /> <item android:drawable="@drawable/a11"android:duration="500" /> <item android:drawable="@drawable/a12"android:duration="500" /> <item android:drawable="@drawable/a13"android:duration="500" /> <item android:drawable="@drawable/a14"android:duration="500" /> <item android:drawable="@drawable/a15"android:duration="500" /> </animation-list> ``` 案例AnimationDrawableDemo2 ### 12.3 GIF动画 ### + 简单介绍案例GifAnimationDemo ### 12.4 全屏与横屏技术 ### ``` public void onCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); /*设置为无标题栏 */ requestWindowFeature(Window.FEATURE_NO_TITLE); /*设置为全屏模式 */ getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); /*设置为横屏 */ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.main); } ``` 全屏技术在拍照、录制视频、游戏中很常用 ### 12.5 获取屏幕属性 ### ``` public void onCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); /*定义DisplayMetrics对象 */ DisplayMetricsdm = new DisplayMetrics(); /*取得窗口属性 */ getWindowManager().getDefaultDisplay().getMetrics(dm); /*窗口的宽度 */ intscreenWidth = dm.widthPixels; /*窗口的高度 */ intscreenHeight = dm.heightPixels; mTextView= (TextView) findViewById(R.id.TextView01); mTextView.setText("屏幕宽度:" + screenWidth + "\n屏幕高度:" + screenHeight); } ``` [示例下载](http://www.apkbus.com/android-83550-1-1.html)