android笔记

Android 动画

Android动画的种类

  • View Animation: 视图动画在古老的Android版本系统中就已经提供了,只能被用来设置View的动画。
  • Drawable Animation: 这种动画(也叫Frame动画、帧动画)其实可以划分到视图动画的类别,专门用来一个一个的显示Drawable的resources,就像放幻灯片一样。
  • Property Animation: 属性动画只对Android 3.0(API 11)以上版本的Android系统才有效,这种动画可以设置给任何Object,包括那些还没有渲染到屏幕上的对象。这种动画是可扩展的,可以让你自定义任何类型和属性的动画。

传统Animation 只有位移、旋转、缩放、透明度四种动画(原理是系统不断调用onDraw方法去重绘界面,来实现动画效果)点击事件还是 原来位置,这是与属性动画的主要区别

补间动画

  • 补间动画作用于View对象,主要包括对View对象的位置、尺寸、旋转角度和透明的变换

  • 动画可以使用XML或JAVA代码实现。

加载XML动画

  • XML文件必须保存在res/anim/目录下
  • AnimationUtils.loadAnimation(this, R.anim.set_main_iv); //加载动画XML文件
  • setAnimation(as); //为View对象设置动画

补间动画类别

AlphaAnimation 透明动画

  • fromAlpha 起始透明度
  • toAlpha 终止透明度
  • duration 持续时间
  • interpolator 加速器
  • fillAfter 用结束帧作为最终样式
  • fillBefore 用起始帧作为最终样式

TranslateAnimation 平移动画

  • fromXDelta X轴起始坐标
  • fromYDelta Y轴起始坐标
  • toXDelta X轴终止坐标
  • toYDelta Y轴终止坐标
  • 移动距离用百分比比较好

ScaleAnimation 缩放动画

  • fromXScale 缩放起始宽度
  • fromYScale 缩放起始高度
  • toXScale 缩放终止宽度
  • toYScale 缩放终止高度
  • pivotX 缩放中心点X轴
  • pivotY 缩放中心点Y轴

RotateAnimation 旋转动画

  • fromDegrees 起始角度
  • toDegrees 终止角度
  • pivotX X轴旋转中心
  • pivotY Y轴旋转中心

组合动画


    
    

属性动画

类结构

  • ValueAnimator
  • ObjectAnimator
  • AnimatorUpdateListener
  • AnimatorListenerAdapter
  • PropertyValuesHolder
  • AnimatorSer
  • TypeEvaluators
  • Interpolators

常用方法

  • setDuration(long duration) 设置动画持续时间
  • setInterpolator(TimeInterpolator value) 设置加速器
  • start() 启动动画
  • setStartDelay(long startDelay) 设置动画延迟
  • end() 结束动画,直接从当前状态跳转到最终状态,并将属性值分配成动画的终止值并触发动画监听器AnimatorListener的onAnimatorEnd方法
  • cancel() 结束动画,但是属性值是当前值,不会是最终值,会先触发AnimatorListener的onAnimationCancel方法,然后触发onAnimationEnd方法的执行
  • addListener(AnimatorListener listener) 设置动画监听

ValueAnimator

值动画,改变动画的属性值,如:渐变度,执行时间。
一个更好的例子:做倒计时。比起以前的60秒倒计时,比写定时器更方便简单

 ValueAnimator  mValueAnimator = ValueAnimator.ofFloat(60, 0);
                mValueAnimator.setDuration(60000);
                //设置插值器,变化速率。线性渐变
                mValueAnimator.setInterpolator( new LinearInterpolator());
                mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {                          
                       mSendCode.setText(Integer.valueOf(((int)(float)animation.getAnimatedValue()))+"s");
                        mSendCode.setEnabled(false);
                        if (animation.getAnimatedValue().toString().equals("0.0")){
                            mSendCode.setText("重新发送");
                            mSendCode.setEnabled(true);
                        }

                    }
                });
                mValueAnimator.start();

ObjectAnimator

    ObjectAnimator oa = ObjectAnimator.ofFloat(tv, "rotationX", 0,360);
    ObjectAnimator oa1 = ObjectAnimator.ofFloat(tv, "rotationY", 0,360);
    AnimatorSet as = new AnimatorSet();
    as.playTogether(oa,oa1);
    as.setDuration(3000);
    as.setInterpolator(new LinearInterpolator());
    as.start();

AnimatorSet

    AnimatorSet aSet = new AnimatorSet();
    aSet.playTogether(ta,ra);//并行
    aSet.playSequentially(ra,sa,ta1);//串行
    aSet.setDuration(3000);//持续时间,所有动画都是该时间
    aSet.setInterpolator(new LinearInterpolator());
    aSet.start();

属性动画一块播放
AnimatorSet animatorSet=new AnimatorSet();
animatorSet.playTogether(animator1,animator2,animator3);
属性动画监听
animator.addListener(new AnimatorListenAdapter(){
四种方法 开始、结束、取消、重复
});
属性动画设置差值器
animator.setInterpolator(new 差值器对象);

ObjectAnimator继承ValueAnimator

MediaPlayer

状态机制

  • MediaPlayer对象对音视频的播放过程由多个状态组成的一整套机制,这套机制就是MediaPlayer的状态机图。
  • 当一个MediaPlayer对象被新建或者调用reset()方法之后,它处于空闲(Idle)状态,在调用release()方法后,才会处于结束(End)状态
  • 当一个MediaPlayer对象被新建或者调用reset()方法之后,它处于空闲(Idle)状态,在调用release()方法后,才会处于结束(End)状态
  • 任何MeidaPlayer对象都必须处于准备(Prepared)状态,然后才开始播放。
  • 要开始播放MeidaPlayer对象都必须成功调用start()方法,可以通过isPlaying()方法来检测当前是否正在播放
  • 通过setLooping(boolean)方法来设置是否循环播放

状态图

android笔记_第1张图片

三种播放资源

应用内部

  • 在res目录下创建raw目录装资源文文件,文件名称必须符合命名规范
  • 调用MediaPlayer.create(this, R.raw.test);加载文件,然后直接调用start()就可以播放,不需要调用prepare()

外存储器

  • 调用setDataSource(sdcard+”/test1.mp3”);加载文件
  • 调用prepare()准备播放,然后调用start()开始播放

网络资源

  • 调用mp.setDataSource(this, Uri.parse(“http://xxxxxxxxxx“));加载网络资源
  • 调用prepare()准备播放,然后调用start()开始播放

Bitmap(位图)

  • Bitmap可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件
  • Bitmap对象由 BitmapFactory 类创建

    bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    

获取数据四种方法

  • decodeByteArray(byte[] data, int offset, int length) 字节数组转化成图片对象
  • decodeFile(String pathName) 将路径对应的图片转化为图片对象
  • decodeResource(Resources res, int id) 将资源图片转化为图片对象
  • decodeStream(InputStream is) 将读流转化为图片对象

Matrix(矩阵)

  • 通过Matrix,可以控制Android绘图坐标的位移、旋转、缩放等功能
  • Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,
    每一种变换在Android的API里都提供了set、 post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点

    //图片缩放
    Matrix m = new Matrix();
    //缩放50%
    m.setScale(0.5f, 0.5f);
    bm2 = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);
    
    
    //图片旋转
    Matrix m = new Matrix();
    //旋转90度
    m.setRotate(90);
    bm2 = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);
    
    //图片切割  从图片的(0,0)位置开始 切割大小有第四和第五个参数决定
    bm2 = Bitmap.createBitmap(bm, 0, 0, bm.getWidth()/2, bm.getHeight()/2);
    
    //保存
    OutputStream stream = null;
    try {
        stream = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath()+"/save.png");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    //保存图片 参数一:图片编码格式   参数二:图片质量   参数三:输出流
    bm2.compress(CompressFormat.PNG , 100, stream);
    

你可能感兴趣的:(android开发,android,ui)