14天学会安卓开发(第十二天)Android动画技术

14天学会安卓开发  
作者:神秘的N (英文名  corder_raine)
联系方式:369428455(反馈)
交流群 :284552167(示例,原文档下载)
版权为作者所有,如有转载请注明出处
目录       





第十二天.Android动画技术
12.1 Tween动画
12.1.1 动画实现
Ø    Tween动画
u    对场景中的对象不断进行图像变换,如平移、缩放、旋转。
u    Frame帧动画
u    顺序播放事先做好的图像,如电影。
u    GIF动画
12.1.2 代码实现Tween动画1
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* 装载资源 */
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
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
< 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动画
01
02
03
04
05
06
07
08
09
10
11
12
13
/* 装载动画布局 */
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

1
2
3
4
5
6
7
< alpha
        android:fromAlpha = "0.1"
        android:toAlpha = "1.0"
        android:duration = "2000"
/>
</ set >


R.anim.scale_animation

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
   < 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

1
2
3
4
5
6
7
8
9
< translate
        android:fromXDelta = "10"
        android:toXDelta = "100"
        android:fromYDelta = "10"
        android:toYDelta = "100"
        android:duration = "1000"
/>
</ set >


R.anim.rotate_animation

01
02
03
04
05
06
07
08
09
10
11
< 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动画
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
/* 实例化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动画
01
02
03
04
05
06
07
08
09
10
11
12
13
14
/* 定义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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
< 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 全屏与横屏技术
01
02
03
04
05
06
07
08
09
10
11
12
13
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 获取屏幕属性
01
02
03
04
05
06
07
08
09
10
11
12
13
14
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);
        }



示例下载
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值