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);  
	}
Android为TV端助力 自定义动画的更多相关文章
- Android为TV端助力:自定义view之太阳
		先看效果图 package com.hhzt.iptv.lvb_w8.view; import android.content.Context;import android.graphics.Canv ... 
- Android为TV端助力 帧动画
		首先在res/drawable/name1.xml/定义一组图片集合: <?xml version="1.0" encoding="utf-8"?> ... 
- Android为TV端助力 自定义通知栏
		package com.example.mvp; import cn.ljuns.temperature.view.TemperatureView;import presenter.ILoginPre ... 
- Android为TV端助力 自定义activity
		今天公司有个需要需要自动弹出界面,而dialog又不符合要求,所以自定义的一个activity的样式 首先在androidmainfest.xml上注册你的activity <activity ... 
- Android为TV端助力 自定义view中findViewById为空的解决办法
		网上说的都是在super(context, attrs);构造函数这里少加了一个字段, 其实根本不只这一个原因,属于view生命周期的应该知道,如果你在 自定义view的构造函数里面调用findVie ... 
- Android为TV端助力 最详细的动画大全,包括如何在代码和在XML中使用
		一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ... 
- Android为TV端助力 deep link(深度链接)与自定义协议!
		此自定义仅供参考! 首先打开androidManifest.xml 在MainActivity中添加如下内容: <activity android:name=".MainActivit ... 
- Android为TV端助力 最简单的自定义圆点view
		首先创建一个选择器,用来判断圆点状态,可以根本自己的需求改 <selector xmlns:android="http://schemas.android.com/apk/res/an ... 
- Android为TV端助力 转载:android自定义view实战(温度控制表)!
		效果图 package cn.ljuns.temperature.view; import com.example.mvp.R; import android.content.Context;impo ... 
随机推荐
- 机器学习基石笔记:02 Learning to Answer Yes/No、PLA、PA
			原文地址:https://www.jianshu.com/p/ed0aee74523f 一.Perceptron Learning Algorithm (一)算法原理 PLA本质是二元线性分类算法,即 ... 
- MySQL单表多字段模糊查询
			今天工作时遇到一个功能问题:就是输入关键字搜索的字段不只一个字段,比如 我输入: 超天才 ,需要检索出 包含这个关键字的 name . company.job等多个字段.在网上查询了一会就找到了答案. ... 
- 【翻译】浏览器渲染Rendering那些事:repaint、reflow/relayout、restyle
			原文链接:http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/ 有没有被标题中的5个“R”吓到?今天,我们来讨论一下浏览器的渲 ... 
- Spring系列之DI的原理及手动实现
			目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 前言 在上一章中,我们介绍和简单实现了容器的部分功能,但是这里还留下了很多的问题.比如我们在构造bean实例的时 ... 
- SVN用户切换
			Eclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能.但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的帐号.密码保存之后 ... 
- Apache-Flink深度解析-DataStream-Connectors之Kafka
			Kafka 简介 Apache Kafka是一个分布式发布-订阅消息传递系统. 它最初由LinkedIn公司开发,LinkedIn于2010年贡献给了Apache基金会并成为顶级开源项目.Kafka用 ... 
- [NewLife.XCode]数据模型文件
			NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含 ... 
- 【深度学习与TensorFlow 2.0】入门篇
			注:因为毕业论文需要用到相关知识,借着 TF 2.0 发布的时机,重新捡起深度学习.在此,也推荐一下优达学城与 TensorFlow 合作发布的TF 2.0入门课程,下面的例子就来自该课程. 原文发布 ... 
- 比MySQL快6倍 深度解析国内首个云原生数据库POLARDB的“王者荣耀”
			随着移动互联网.电子商务的高速发展,被使用最多的企业级开源数据系统MySQL面临着巨大挑战——为迎接“双11"的高并发要提前做好分库分表;用户不断激增要将读写分离才能应对每天上亿次的访问,但 ... 
- C# 锁系列目录
			1.lock.Monitor lock(obj){} 编译之后是如下代码 Monitor.Enter(obj); try { // } finally { Monitor.Exit(obj); } 2 ... 
