【安卓】自己定义基于onDraw的随意动画(不不过平移/旋转/缩放/alpha)、!

思路:

1.基于时间的显示映射。如:给定度数,显示圆弧,加上时序,就可以有圆弧动画的效果

2.给定时序。

用于驱动动画的一帧帧绘制

方案一、基于ObjectAnimator。动画运作时会调用degree相应set函数(基于放射调用),即setDegree。

ObjectAnimator ani=ObjectAnimator.ofInt(myView, "degree", 0,300);

ani.start();

注:1>混编后,默认会将setDegree混掉,导致找不到函数,故混编后这样的机制会失效。

解决方法是1.proguard中防止该段代码混编(详细方法百度) 2.用法二

2>ObjectAnimator在3.0后才支持,可使用NineOldAndroids库,效果全然一样。

方案二、仍然基于ObjectAnimator。但基于回调,这样的方法未用到反射,故混编时仍ok

ObjectAnimator ani=ObjectAnimator.ofInt(myView, new Prop(), 0,300);

ani.start();

class Prop extends Property<View, Integer> {

		public Prop() {
			// TODO Auto-generated constructor stub
			super(Integer.class, "kk");
		}

		@Override
		public void set(View object, Integer value) {
			// TODO Auto-generated method stub
			((MyView1)object).setDegree(value);
		}

		@Override
		public Integer get(View object) {
			// TODO Auto-generated method stub
			return null;
		}
	};

方案三、用animation提供时序。

interpolatedTime为0~1,即时间的百分比。

Animation ani=new Animation() {
				@Override
				protected void applyTransformation(float interpolatedTime,
						Transformation t) {
					// TODO Auto-generated method stub
					myView.setDegree((int)(interpolatedTime*300f));
				}
			};
			ani.setDuration(3000);
			myView.startAnimation(ani);

//===========================================================================

自己定义视图,setDegress可改变圆弧角度:

private class MyView1 extends ImageView {

		public int degree = 0;

		public MyView1(Context ct) {
			// TODO Auto-generated constructor stub
			super(ct);

		}

		@Override
		protected void onDraw(Canvas canvas) {
			// TODO Auto-generated method stub
			super.onDraw(canvas);

			Rect r = new Rect();
			getLocalVisibleRect(r);
			canvas.drawArc(new RectF(r), 0, degree, true, pt);
		}

		public void setDegree(int degree) {
			this.degree = degree;
			invalidate();
		}
	}

效果:

   

时间: 2024-10-12 20:59:34

【安卓】自己定义基于onDraw的随意动画(不不过平移/旋转/缩放/alpha)、!的相关文章

【安卓】自定义基于onDraw的任意动画(不仅仅是平移/旋转/缩放/alpha)、!

思路: 1.基于时间的显示映射.如:给定度数,显示圆弧,加上时序,即可有圆弧动画的效果 2.给定时序.用于驱动动画的一帧帧绘制 方案一.基于ObjectAnimator.动画运作时会调用degree对应set函数(基于放射调用),即setDegree. ObjectAnimator ani=ObjectAnimator.ofInt(myView, "degree", 0,300); ani.start(); 注:1>混编后,默认会将setDegree混掉,导致找不到函数,故混编后

【安卓】数据库基于脚本的&quot;增量更新&quot;,每次更新时不需修改java代码、!

思路: 1.当然是基于SQLiteOpenHelper.onCreate(第一次安装程序时调用).onUpdate(升级程序时调用) 2.用"脚本"(脚本制作具体方法问度娘)做数据库升级,文件名标识对应版本,java中根据"上一版本.当前版本"选择执行的脚本. 升级时,修改DB_VERSION(当前版本)即可. DBManager.java: package com.example.test; import java.io.ByteArrayOutputStream

一款基于jquery ui的动画提交表单

今天要给大家分享一款基于jquery ui的动画提交表单.这款提交表单的的效果是以动画的形式依次列表所需填写的信息.效果非常不错,效果图如下: 在线预览   源码下载 实现的代码. html代码: <div align="center"> <form id="myform"> <div id="bloc_recherche_couleur"> <div id="etape0_recherche&

分享一款基于jquery的圆形动画按钮

之前为大家介绍过一款纯css3实现的圆形旋转分享按钮.今天要给大家带来一款基于jquery的圆形动画按钮.这款按钮鼠标经过的时候以边框转圈,然后逐渐消息,在实例中给出了四种颜色的demo.效果图如下: 在线预览   源码下载 实现的代码. html代码: <figure class='red'> <div class='icon'> i</div> <div class='circle'> </div> </figure> <f

基于animation.css实现动画旋转特效

分享一款基于animation.css实现动画旋转特效.这是一款基于CSS3实现的酷炫的动画旋转特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="wrap"> <div class="mod_bg"> <div class="bg1"></div> <div class="bg2"></div> <

基于js全屏动画焦点图幻灯片

今天给大家分享一款基于js全屏动画焦点图幻灯片.这款焦点图内的内容以动画形式出现和消失.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="slideshow" id="slideshow"> <ol class="slides"> <li class="current"> <div class="description"&g

atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t

atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t 1. 堵塞队列和非堵塞队列 1 2. java.util.Queue接口. 1 3. ConcurrentLinkedQueue 2 4. BlockingQueue堵塞队列 2 4.1. 1. ArrayBlockingQueue 3 4.2. 2. LinkedBlockingQueue 3 4.3. 3. DelayQueue 3 4.4. 4. PriorityBlockingQueue 3 4.5.

注意padding-top 百分比定义基于父元素宽度的百分比上内边距!!是基于宽度

定义和用法 padding-top 属性设置元素的上内边距(空间). 说明 该属性设置元素上内边距的宽度.行内非替换元素上设置的上内边距不会影响行高计算,因此,如果一个元素既有内边距又有背景,从视觉上看可能延伸到其他行,有可能还会与其他内容重叠.不允许指定负内边距值. 注释:不允许使用负值. 默认值: 0 继承性: no 版本: CSS1 JavaScript 语法: object.style.paddingTop="10px" 可能的值 值 描述 length 规定以具体单位计的固定

基于jQuery超级酷动画滑动插件

分享一款基于jQuery超级酷动画滑动插件.这是一款基于jquery.pogo-slider插件实现的多个滑块切换特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="pogoSlider" id="js-main-slider"> <div class="pogoSlider-slide" data-transition="slideOverLeft" data-