drawable
view(textview,imageview ...)
viewgroup(relative layout,linearLayout ...)
-----------------------------------------------------------------
分层模式
canvas分层
view叠加(事件传递机制)
view的事件传递机制
是通过dispatchTouchEvent进行事件分发的,(一次触摸的完整行为包括(down move up))
1.父容器的dispatchTouchEvent会调用onInterceptTouchEvent询问要不要拦截
如果拦截就会调用自己的onTouchEvent,事件就不再向下分发。(并且后续的事件(move up等)直接到此view也不再分发)
不拦截
2.就调用子view的dispatchTouchEvent重复上过程。
3.直到叶子节点,叶子节点的dispatchTouchEvent执行叶子节点的onTouchEvent
onTouchEvent如果返回true,dispatchTouchEvent也返回true。事件被消费,事件不再传递。
onTouchEvent如果返回false,dispatchTouchEvent也返回false。
4.父view调其他有关子view的dispatchTouchEvent,如果都返回false,执行父的onTouchEvent。
注:叶子节点onTouchEvent的down事件返回了false后续事件都不会再来(父一般都不会拦截down,因为拦截后move,up都不会到子)
滑动冲突问题其实就是子的view消费了事件导致父view得不到此事件,
解决方法就是根据需要决定父view要不要拦截此事件。
http://www.cnblogs.com/linjzong/p/4191891.html
----------------------------------------------------------------
刷新动力
定时器
延时
滑动
帧动画
属性动画
view动画
---------------------------------------------------------------------------------------------------------------
动画类型
Android 中的动画有帧动画,属性动画(3.0后的)view动画,
帧动画
AnimationDrawable - <animation-list>(它是一种drawable,对应xml只能放在drawable文件夹下,其他两种是放在anim中的)
属性动画
ObjectAnimator - <objectAnimator>
ValueAnimator - <animator>
AnimatorSet - <set>(动画合集,几种动画同时播放,或顺序播放)
view动画
AlphaAnimation - <alpha/>(透明度动画)
RotateAnimation - <rotate/>(旋转动画有轴心)
ScaleAnimation - <scale/>(缩放动画有轴心)
TranslateAnimation - <translate/>(移动动画)
AnimationSet - <set> (view动画合集,几种动画同时播放,或顺序播放)
1.AnimationDrawable逐帧动画(是一种drawable,是一张一张图片的顺序展示,缺点是一般占内存比较大)
xml中定义:
对应的标签是<animation-list>(它是一种drawable所以只能放到res/drawable文件夹下 )
animation-list属性:
visible:drawable的初始可见性,默认为false。
oneshot:是否只播放一次且停在最后一帧上。
variablePadding:是否随着其状态的改变而改变。默认是false
animation-list中的item属性:
drawable: 当前帧引用的drawable资源
duration: 当前帧显示的时间(毫秒为单位)
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item
android:drawable="@mipmap/ic_launcher"
android:duration="200" />
<item
android:drawable="@mipmap/ic_launcher"
android:duration="200" />
<item
android:drawable="@mipmap/ic_launcher"
android:duration="200" />
</animation-list>
AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.animation_drawable);
imageView.setBackgroundResource(animationDrawable);
animationDrawable.start();
代码定义帧动画:
animationDrawable = new AnimationDrawable();
animationDrawable.addFrame(drawable1, 100);
animationDrawable.addFrame(drawable2, 100);
animationDrawable.addFrame(drawable3, 100);
imageView.setBackgroundResource(animationDrawable);
animationDrawable.start();
2.属性动画(ValueAnimator,ObjectAnimator,AnimatorSet,ViewPropertyAnimator)(3.0以后才有)
是值的一系类变化,这些值可以是int float color object(这个需要自己定义估值器)),变化的值再赋给属性,形成动画。
view动画的共有属性:
duration:动画时长。
startOffset:动画延时多长时间开始。
repeatCount:动画播放次数,默认为0,-1表示无限循环(无限的代码中要自己结束动画)
repeatMode:默认是restart每次结束后重新开始,reverse每次结束后逆向返回。
valueType:变化值的类型xml只能是intType floatType,colorType,pathType(用到ObjectAnimator上)。
valueFrom:开始值。
valueTo:结束值。
interpolator:属性为动画插入器
accelerate_interpolator 加速-动画插入器
decelerate_interpolator 减速- 动画插入器
accelerate_decelerate_interpolator 加速-减速 动画插入器
例如android:interpolator="@android:anim/accelerate_decelerate_interpolator"
设置执行者监听
valueAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
1.ValueAnimator值动画执行器(是值的一系类变化,这些值赋给对象属性形成了动画)
xml中定义:(xml中定义xml文件必须要放到res/animator文件夹下)
对应标签<animtor>
<animator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:startOffset="1000"
android:repeatCount="-1"
android:repeatMode="reverse"
android:valueType="intType"
android:valueFrom="10"
android:valueTo="100"/>
Animator animator= AnimatorInflater.loadAnimator(this,R.animator.my_animator);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float f = (Float) animation.getAnimatedValue();
}
});
valueAnimator.start();
代码中定义:
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);//值可以不是两个可以任意多个
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float f = (Float) animation.getAnimatedValue();
}
});
valueAnimator.start();
只能代码中用:
对象
ValueAnimator valueAnimator = ValueAnimator.ofObject(new TypeEvaluator<MyClass>(){
@Override
public String evaluate(float fraction, String MyClass, String MyClass) {
return (MyClass) animation.getAnimatedValue();
}
},new MyClass(),new MyClass());
valueAnimator.start();
属性值holder(可以实现多个属性变化)
PropertyValuesHolder propertyValuesHolder1=PropertyValuesHolder.ofInt(String propertyName, int... values);
propertyValuesHolder1.setObjectValues(myObject);
Keyframe类型对象由一个time/value对组成,定义了指定时间点的指定值
Keyframe ofInt(float fraction)//还需setValue(Object value)
Keyframe ofInt(float fraction, int value)
每一个keyframe还可以拥有自己的interpolator,控制了前一个关键帧到这一个关键帧之间的时间动画行为。
PropertyValuesHolder propertyValuesHolder2=PropertyValuesHolder.ofKeyframe(String propertyName, Keyframe... values)
propertyValuesHolder2.setObjectValues(myObject);
ValueAnimator valueAnimator = ValueAnimator.ofPropertyValuesHolder(propertyValuesHolder1,propertyValuesHolder2);
valueAnimator.start();
2.ObjectAnimator对象动画执行器(继承了ValueAnimator),(对象动画执行器,直接对属性做改变(要变化的属性必须有set,get方法(如果原类没有可以包装原类加上)))
xml中定义:
对应标签<objectAnimator>
propertyName:要改变值的属性名。(一定要有get,set方法)
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="xxx"
android:duration="1000"
android:startOffset="1000"
android:repeatCount="-1"
android:repeatMode="reverse"
android:valueType="intType"
android:valueFrom="10"
android:valueTo="100"/>
Animator animator= AnimatorInflater.loadAnimator(this,R.animator.my_animator);
animator.setTarget(object);
animator.start();
代码中定义:
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(view, "rotationX", 0.0F, 360.0F).setDuration(500);
objectAnimator.start();
ObjectAnimator ofInt(Object target, String xPropertyName, String yPropertyName,Path path);//两个参数需要path就是坐标点
ObjectAnimator ofMultiInt(Object target, String propertyName, Path path)
只能代码中用:
对象
ObjectAnimator objectAnimator = ObjectAnimator.ofObject(object,"propertyName",new TypeEvaluator<MyClass>(){
@Override
public String evaluate(float fraction, String MyClass, String MyClass) {
return (MyClass) animation.getAnimatedValue();
}
},new MyClass(),new MyClass());
objectAnimator.start();
属性值holder
PropertyValuesHolder propertyValuesHolder1=PropertyValuesHolder.ofInt(String propertyName, int... values);
propertyValuesHolder1.setObjectValues(myObject);
Keyframe类型对象由一个time/value对组成,定义了指定时间点的指定值
Keyframe ofInt(float fraction)//还需setValue(Object value)
Keyframe ofInt(float fraction, int value)
每一个keyframe还可以拥有自己的interpolator,控制了前一个关键帧到这一个关键帧之间的时间动画行为。
PropertyValuesHolder propertyValuesHolder2=PropertyValuesHolder.ofKeyframe(String propertyName, Keyframe... values)
propertyValuesHolder2.setObjectValues(myObject);
ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(Object object,PropertyValuesHolder... values);
objectAnimator.start();
3.AnimatorSet属性对话集
xml中定义:
对应标签<set>
ordering:together一起播放,sequentially顺序播放。
Interpolator:插值器
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="xxx"
android:duration="1000"
android:startOffset="1000"
android:repeatCount="-1"
android:repeatMode="reverse"
android:valueType="intType"
android:valueFrom="10"
android:valueTo="100"/>
<objectAnimator
android:propertyName="yyy"
android:duration="1000"
android:startOffset="1000"
android:repeatCount="-1"
android:repeatMode="reverse"
android:valueType="intType"
android:valueFrom="10"
android:valueTo="100"/>
</set>
Animator animator= AnimatorInflater.loadAnimator(this,R.animator.my_animator);
animator.setTarget(object);
animator.start();
代码中定义:
AnimatorSet animatorSet=new AnimatorSet();
animatorSet.playSequentially(objectAnimator1,objectAnimator2);
animatorSet.start();
ViewPropertyAnimator view属性动画(用animator的方式执行view动画)
view.animate().alpha(1);//view布局时的初始值变化到指定值1.
3.view动画(alpha,rotate,scale,translate,AnimationSet)
view动画的共有属性:
duration:属性为动画持续时间
startOffset:延时多长时间开始执行
fillAfter:动画结束后是否停留在最后一帧。
repeatCount="-1":重复次数
repeatMode :动画重播的模式,即从头到尾,从头到尾,还是从头到尾,在从尾到头
interpolator:属性为动画插入器
accelerate_interpolator 加速-动画插入器
decelerate_interpolator 减速- 动画插入器
accelerate_decelerate_interpolator 加速-减速 动画插入器
例如android:interpolator="@android:anim/accelerate_decelerate_interpolator"
注:坐标或宽高的取值,可以是绝对值或者的自己宽或高的比例值(以下无特殊说明取值都可以是这两种形式用的坐标系原点都在自己的view的左上角)
动画可以设置监听
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// 动画开始时执行
}
@Override
public void onAnimationEnd(Animation animation) {
// 动画结束时执行
}
@Override
public void onAnimationRepeat(Animation animation) {
// 动画每次重复时执行
}
});
alpha 透明度动画
xml中定义:
对应标签<alpha>(此种动画xml是放到res/anim文件夹下的)
fromAlpha:属性为动画起始时透明度(取值为0f-1f)
toAlpha:属性为动画结束时透明度
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0"
android:toAlpha="1" />
Animation myAnimation = AnimationUtils.loadAnimation(this,R.anim.my_action);
view.startAnimation(animation);
代码中定义:
AlphaAnimation alphaAnimation=new AlphaAnimation(0.1f, 1.0f);
view.startAnimation(animation);
rotate旋转动画
xml中定义:
对应的标签是<rotate>
pivotX:旋转轴心x轴坐标
pivotY:旋转轴心y轴坐标
fromDegrees:动画开始时的角度(顺时针为正值,逆时针为负值。取值可以大于360,水平状态为0度,)
toDegrees:动画结束时的角度
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="180" />
Animation myAnimation = AnimationUtils.loadAnimation(this,R.anim.my_action);
view.startAnimation(animation);
代码中定义:
public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,int pivotYType, float pivotYValue)
pivotYType,pivotYValue:可以取值为Animation.ABSOLUTE(绝对)、Animation.RELATIVE_TO_SELF(相对自身)、Animation.RELATIVE_TO_PARENT(相对父)
view.startAnimation(animation);
scale尺寸伸缩动画
xml中定义:
对应的标签是<scale>
pivotX:旋转轴心x轴坐标
pivotY:旋转轴心y轴坐标
fromXScale:动画开始时的宽度
toXScale:动画结束时的宽度
fromYScale:动画开始时的高度
toYScale:动画结束时的高度
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="0%"
android:toXScale="100%"
android:fromYScale="100%"
android:toYScale="100%"/>
Animation myAnimation = AnimationUtils.loadAnimation(this,R.anim.my_action);
view.startAnimation(animation);
代码中定义:
public ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
pivotYType,pivotYValue:可以取值为Animation.ABSOLUTE(绝对)、Animation.RELATIVE_TO_SELF(相对自身)、Animation.RELATIVE_TO_PARENT(相对父)
view.startAnimation(animation);
translate 位置转移动画
xml中定义:
对应的标签是<translate>
fromXDelta:动画开始view左上角的x坐标
toXDelta:动画结束时view左上角的x坐标
fromYDelta动画开始时view左上角的y坐标
toYDelta:动画结束时view左上角的y坐标
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="100"
android:fromYDelta="0"
android:toYDelta="100" />
Animation myAnimation = AnimationUtils.loadAnimation(this,R.anim.my_action);
view.startAnimation(animation);
代码中定义:
public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,int fromYType, float fromYValue, int toYType, float toYValue)
view.startAnimation(animation);
AnimationSet view动画合集
xml中定义:
对应的标签是<set>
Interpolator:插值器
shareInterpolator:默认true。集合中的动画是否共享插值器。如果合集中子项也有插值器,子项的起作用。
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true">
<alpha />
<rotate />
<scale />
<translate />
<set>
...
</set>
</set>
AnimationSet myAnimationSet = AnimationUtils.loadAnimation(this,R.anim.my_action);
view.startAnimation(myAnimationSet);
代码中定义:
AnimationSet set=new AnimationSet(true);
set.addAnimation(alphaAnimation);
set.addAnimation(rotateAnimation);
set.addAnimation(scaleAnimation);
set.addAnimation(translateAnimation);
set.addAnimation(aSet);
view.startAnimation(set);
相关推荐
SystemView系统使用说明
HPE OneView系统管理平台.pptx
HPE OneView系统管理平台.pdf
基于Systemview系统的ASK调制与解调专业课程设计.doc
基于SystemView的PCM通信系统、MSK调制与解调、扩频通信系统、正交系统、直序扩频系统通信、BPSK_DPSK信号解调、自适应跳频通信系统抗干扰性能分析等仿真
基于systemview系统的2fsk调制与解调课程设计.doc
基于Systemview系统的2ASK调制与解调课程设计.doc
基于Systemview系统的2FSK调制与解调课程设计.pdf
DebugView图文教程 DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程
1.2 SystemView系统视窗 1 1.3 系统窗下的库选择操作 4 1.4 系统定时(System Time) 8 1.5 分析窗介绍 9 1.6 在分析窗下观察分析结果 10 1.7 总结 14 第二部分 数字通信系统仿真分析举例 15 2.1 简单基带传输系统...
此软件 很 小 几十KB 可以 查看 TCP和UDP的 使用 进程情况
1.2 SystemView系统视窗 3 1.3 系统定时(System Time) 5 1.4 分析窗介绍 6 数字带通传输系统仿真 7 2.1 2ASK调制系统 7 2.2 2FSK调制系统 13 2.3 2PSK调制系统 19 2.4 2DPSK调制系统 22 16QAM调制系统分析 27 3.1 ...
第一章 systemview动态仿真软件 第二章 systemview的图符库 第三章 滤波器与线性系统 第四章 模拟线性调制系统 第五章 模拟角度调制系统 第六章 通信系统中的锁相环 第七章 数字系统的基带传输 第八章 数字信号的...
pcm系统仿真实验报告 有详细参数设置 和模块框图
7.22③ 试基于图的深度优先搜索策略写一算法, 判别以邻接表方式存储的有向图中是否存在由顶 点vi到顶点vj的路径(i≠j)。 注意:算法中涉及 的图的基本操作必须在此存储结构上实现。 实现下列函数: ...
结合EDA工具—动态仿真软件SystemView,介绍数字通信系统的仿真和分析方法以及数字通信系统设计和开发的新手段,并力求通过实例使读者掌握和精通System View动态仿真软件。 本书内容分为5章,分别介绍SystemView...
一组用于软件项目的Open Base和Open View系统。 Nob(Open Base)和Nov(Open View)是Rust语言项目。 Hob和Hov是Go语言项目。 这些系统一起被称为Hobnob。 该项目正在积极开发中,尚未计划发布日期。 如果您想了解...
2.2 使用Systemview进行系统仿真的步骤 3 三、二进制频移键控(2FSK) 4 3.1 二进制频移键控(2FSK)的基本原理 4 3.1.1 2FSK调制的方法 4 3.1.2 2FSK解调的方法 6 3.2 使用Systemview软件对2FSK系统进行仿真 6 ...
基于systemview的基带传输系统贡献给大家,用于对付那些变态的老师啦!里面包含我写的实验报告啦,虽然不咋的,但是原理还是清楚的!systemview里面包含了7个子系统,包括信源子系统,CMI编码,CMI译码,位同步,帧...
Systemview 动态系统分析及通信系统仿真设计