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);
相关推荐
HPE OneView 系统管理平台 HPE OneView 系统管理平台是一种创新性的解决方案,旨在解决传统 IT 服务交付能力不足的问题。该平台提供了一种简洁、智能、自动化的管理方式,帮助企业快速建立和管理基础设施,提高 IT ...
总之,HPE OneView系统管理平台通过提供一个集中的、以消费者为中心的管理解决方案,解决了传统IT管理中的许多挑战,加速了基础设施生命周期管理,降低了TCO,并显著提高了IT服务交付的速度和质量。无论是对于小型...
基于Systemview系统的ASK调制与解调专业课程设计 本文主要介绍了基于Systemview系统的ASK调制与解调专业课程设计。Systemview是一个用于现代工程和科学系统设计及仿真动态系统分析平台,提供了一个精密嵌入式分析...
"基于Systemview系统的2FSK调制与解调课程设计" Systemview系统是一个动态系统分析平台,提供了一个精密的嵌入式分析工具,能够满足用户在现代工程和科学系统设计及仿真中的需求。Systemview平台可以进行数字信号...
"基于Systemview系统的2ASK调制与解调课程设计" SystemView 是一个用于现代工程与科学系统设计及仿真的动态系统分析平台。它可以进行数字信号处理(DSP)系统、模拟与数字通信系统、信号处理系统和控制系统的仿真...
SystemView 基本属于一个系统级工具平台,可进行包括数字信号处理(DSP)系统、模拟与数字通信系统、信号处理系统和控制系统的仿真分析,并配置了大量图符块(Token)库,用户很容易构造出所需要的仿真系统,只要...
SystemView 是一款强大的系统设计和仿真工具,专用于构建、分析和模拟电子系统。系统界面包含多个关键元素,如标题栏、菜单栏、工具条、滚动条、提示栏、图符库和设计工作区,方便用户高效操作。 设计工作区是核心...
基于SystemView的PCM通信系统、MSK调制与解调、扩频通信系统、正交系统、直序扩频系统通信、BPSK_DPSK信号解调、自适应跳频通信系统抗干扰性能分析等仿真
《QlikView Server 11 ...通过本文的详尽介绍,希望能帮助用户做出合理的硬件和软件选择,确保QlikView系统的高效稳定运行。在实际操作中,还需考虑网络环境、数据安全性等因素,以全面保障数据分析工作的顺利进行。
与Xilinx公司的软件CoreGenerator配套,可以将SystemView系统中的部分器件生成下载到FPGA芯片所需的数据文件。与DSP芯片设计的接口能够将其DSP库中的部分器件生成DSP芯片编程的C语言源代码。 在仿真时,SystemView...
DebugView图文教程 DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程DebugView图文教程
#### 1.2 SystemView系统视窗 系统视窗是SystemView的主要工作区,用户在这里布局和连接模块,形成完整的通信系统模型。视窗中包含模块库、系统时间设置、信号源、处理模块和信号监视器等元素。 #### 1.3 系统窗下...
此软件 很 小 几十KB 可以 查看 TCP和UDP的 使用 进程情况
SystemView系统视窗的主菜单栏包括文件(File)、编辑(Edit)、参数优选(Preferences)、视窗观察(View)、便笺(NotePads)、连接(Connetions)、编译器(Compiler)、系统(System)、图符块(Tokens)、工具...
第一章 systemview动态仿真软件 第二章 systemview的图符库 第三章 滤波器与线性系统 第四章 模拟线性调制系统 第五章 模拟角度调制系统 第六章 通信系统中的锁相环 第七章 数字系统的基带传输 第八章 数字信号的...
在Android开发中,自定义控件(View)是构建复杂用户界面的重要手段,它允许开发者扩展标准组件的功能,实现独特的交互效果和...通过不断实践和学习,开发者可以更好地驾驭Android的View系统,创造出更多创新的应用。
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 ...
- **安装License Key**:激活View系统,确保所有组件合法运行。 - **添加vCenter服务器**:将vCenter Server添加到View Manager,以便管理虚拟机资源。 - **配置外部访问URL**:设置允许用户访问View桌面的URL。 - *...