android 飘心动画(直播点赞)效果(三)---相关知识点整理

这篇文章是关于 android 飘心动画(直播点赞)效果
相关知识点的整理,应为我对动画相关的部分,不是很熟悉,所以对于第一篇文章上面所涉及的只是进行了总结和整理。

1.android 自定义view之 onMeasure()

可以说重载onMeasure(),onLayout(),onDraw()三个函数构建了自定义View的外观形象。再加上onTouchEvent()等重载视图的行为,可以构建任何我们需要的可感知到的自定义View。

其中mode的解释说明:
mode共有三种情况,取值分别为MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST。

MeasureSpec.EXACTLY是精确尺寸,当我们将控件的layout_width或layout_height指定为具体数值时如andorid:layout_width=”50dip”,或者为FILL_PARENT是,都是控件大小已经确定的情况,都是精确尺寸。

MeasureSpec.AT_MOST是最大尺寸,当控件的layout_width或layout_height指定为WRAP_CONTENT时,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可。因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。

MeasureSpec.UNSPECIFIED是未指定尺寸,这种情况不多,一般都是父控件是AdapterView,通过measure方法传入的模式。
因此,在重写onMeasure方法时要根据模式不同进行尺寸计算。
下面代码就是一种比较典型的方式:

@Override    
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    
    setMeasuredDimension(getMeasuredLength(widthMeasureSpec, true), getMeasuredLength(heightMeasureSpec, false));    
}    


private int getMeasuredLength(int length, boolean isWidth) {    
    int specMode = MeasureSpec.getMode(length);    
    int specSize = MeasureSpec.getSize(length);    
    int size;    
    int padding = isWidth ? getPaddingLeft() + getPaddingRight()    
            : getPaddingTop() + getPaddingBottom();    
    if (specMode == MeasureSpec.EXACTLY) {    
        size = specSize;    
    } else {    
        size = isWidth ? padding + mWave.length / 4 : DEFAULT_HEIGHT    
                + padding;    
        if (specMode == MeasureSpec.AT_MOST) {    
            size = Math.min(size, specSize);    
        }    
    }    
    return size;    
}  

相关链接地址:http://blog.csdn.net/pi9nc/article/details/18764863


2.android 动画插值器

2.1插值器的文字解释:

http://blog.csdn.net/jason0539/article/details/16370405

Interpolator用于动画中的时间插值,其作用就是把0到1的浮点值变化映射到另一个浮点值变化。

(1) AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速
(2) AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
(3) AnticipateInterpolator 开始的时候向后然后向前甩
(4) AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
(5) BounceInterpolator 动画结束的时候弹起
(6) CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
(7) DecelerateInterpolator 在动画开始的地方快然后慢
(8) LinearInterpolator 以常量速率改变
(9.) OvershootInterpolator 向前甩一定值后再回到原来位置

2.2插值器的图表解释:

http://www.cnblogs.com/mengdd/p/3346003.html

2.3插值器的简单使用(最好自己动手写一遍)
https://github.com/walfud/HelloInterpolator

2.4自定义插值器(高级用法):
http://www.cnblogs.com/wondertwo/p/5327586.html


3.android 动画 path 和 pathMeasure

Path 的基础讲解:
http://blog.csdn.net/cquwentao/article/details/51363475

Path 和pathMeasure 的进阶:
http://blog.csdn.net/cquwentao/article/details/51436852

PathMeasure
PathMeasure主要用来测量path,通过它,我们可以得到路径上特定的点的坐标等等。先看看他的基本方法。

(1) 构造方法
public PathMeasure()
public PathMeasure(Path path, boolean forceClosed)
如上,有两个方法,第一个就不讲解了,第二个方法中有两个参数;
path:需要测量的path
forceClosed:是否关闭path

(2) setPath
public void setPath(Path path, boolean forceClosed)
这里就是指定需要测量的path,基本和上面的第二个构造函数类似。

(3) getLength
返回当前path的总长度。

(4) getMatrix
public boolean getMatrix(float distance, Matrix matrix, int flags)
这个方法和上面的其实类似,只是他返回的是一个处理好的matrix,但是这个matrix是以左上角作为旋转点,所以需要将这个点移动到中心点。
其中还多了一个参数flags,指的是这个martrix需要什么信息。flags的值有如下两个
PathMeasure.POSITION_MATRIX_FLAG:位置信息
pathMeasure.TANGENT_MATRIX_FLAG:切边信息,方位角信息,使得图片按path旋转。


4.线程安全的累加类 atomicinteger

atomicinteger类的作用:特别适用于高并发访问。

AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。

相关地址:
http://www.cnblogs.com/Gordon-YangYiBao/archive/2012/08/07/2626422.html

http://haininghacker-foxmail-com.iteye.com/blog/1401346

猜你喜欢

转载自blog.csdn.net/android_freshman/article/details/52447444