zoukankan      html  css  js  c++  java
  • Android为TV端助力 自定义动画

    android自定义动画注意是继承Animation,重写里面的initialize和applyTransformation,在initialize方法做一些初始化的工作,在applyTransformation方法进行相应的轨阵变化即可!

    直接上demo!

    public class Rotate3dAnimation extends Animation {
    // 开始角度
    private final float mFromDegrees;
    // 结束角度
    private final float mToDegrees;
    // 中心点
    private final float mCenterX;
    private final float mCenterY;
    private final float mDepthZ;
    // 是否需要扭曲
    private final boolean mReverse;
    // 摄像头
    private Camera mCamera;

    public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX,
    float centerY, float depthZ, boolean reverse) {
    mFromDegrees = fromDegrees;
    mToDegrees = toDegrees;
    mCenterX = centerX;
    mCenterY = centerY;
    mDepthZ = depthZ;
    mReverse = reverse;
    }

    @Override
    public void initialize(int width, int height, int parentWidth,
    int parentHeight) {
    super.initialize(width, height, parentWidth, parentHeight);
    mCamera = new Camera();
    }

    // 生成Transformation
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
    final float fromDegrees = mFromDegrees;
    // 生成中间角度
    float degrees = fromDegrees
    + ((mToDegrees - fromDegrees) * interpolatedTime);

    final float centerX = mCenterX;
    final float centerY = mCenterY;
    final Camera camera = mCamera;

    final Matrix matrix = t.getMatrix();

    camera.save();
    if (mReverse) {
    //camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
    camera.rotateY(mCenterY);
    } else {
    //camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
    camera.rotateY(-mCenterY);
    }
    camera.rotateY(degrees);
    // 取得变换后的矩阵
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX, centerY);
    }
    }

    这是一个模仿3D旋转动画的效果,下面是调用方法,mSecondMenuLayout指的是要开始动画的view

    /**
    *
    * @param start 开始角度
    * @param end 结束角度
    */
    private void applyRotation(float start, float end) {

    // 计算中心点
    final float centerX = mSecondMenuLayout.getWidth() / 2.0f;
    // final float centerY = mSecondMenuLayout.getHeight() /2.0f;
    final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
    centerX, 360, 310.0f, true);
    //设置动画的持续时间
    rotation.setDuration(1000);
    //设置动画完成后是否保留原样
    rotation.setFillAfter(false);
    //设置动画插补器
    rotation.setInterpolator(new AccelerateDecelerateInterpolator());
    //设置动画监听
    rotation.setAnimationListener(mAnimListener);
    mSecondMenuLayout.startAnimation(rotation);
    }

  • 相关阅读:
    国内三大云数据库测试对比
    Nginx源码安装及调优配置
    如何在 CentOS 7 用 cPanel 配置 Nginx 反向代理
    开学了!这些Linux认证你要知道
    快速入门SaltStack
    WPF模板
    C#基础知识回顾-- 属性与字段
    程序员接私活经验谈[转]
    强烈推荐:240多个jQuery插件
    [Java]读取文件方法大全
  • 原文地址:https://www.cnblogs.com/xiaoxiaing/p/5857211.html
Copyright © 2011-2022 走看看