一、Drawable目录(res/drawable)
1、bitmap ,位图
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:antialias="true"
android:dither="true"
android:src="@drawable/wang"
android:tileMode="mirror"> </bitmap>
tileMode: 平铺属性 antialias:抗锯齿 dither:抗抖动
mirror 镜像 图片有倒立面 repeat 重复 图片重复填充
clamp 边缘拉伸 效果奇怪 disable 默认 图片默认显示
2、clip,图片裁剪
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@color/colorPrimary"
android:clipOrientation="horizontal"
android:gravity="left"> </clip>
clipOrientation:裁剪方向 gravity:裁剪起始位置
在代码实现裁剪,通过调用setLevel(),取值0~10000,0完全不见,10000完全显示
mDrawable= (ClipDrawable)mImageView.getDrawable();
mDrawable.setLevel(5000);
3、inset,插入图片
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@color/colorPrimary"
android:insetLeft="50dp"
android:insetRight="50dp"
android:insetTop="50dp"
android:insetBottom="50dp"> </inset>
边距:insetLeft,insetRight,insetTop,insetBottom
4、layer,图层,列表最后一个绘制在最上层
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="20dp" android:top="20dp">
<bitmap android:gravity="center" android:src="@drawable/wang"/>
</item>
<item android:left="20dp" android:top="20dp">
<bitmapandroid:gravity="center"android:src="@drawable/wang"/>
</item> </layer-list>
5、lever-list ,等级列,显示对应等级的图片
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/close" android:minLevel="6" android:maxLevel="10" />
<item android:drawable="@drawable/open" android:minLevel="12" android:maxLevel="20"/>
</level-list>
代码实现:
<ImageView android:id="@+id/level" android:src="@drawable/level"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
mImageView.setImageLevel(8);
6、scale,图片缩放
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/wang" android:scaleGravity="center"
android:scaleWidth="50%" android:scaleHeight="50%" > </scale>
7、shape,图片形状
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/colorAccent"/>
<corners android:radius="32dp"/>
<stroke android:width="12dp" android:color="@color/colorPrimary"
android:dashGap="12dp" android:dashWidth="12dp"/> </shape>
8、selector,监听控件状态
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/wang0"/>
<item android:state_focused="true" android:drawable="@drawable/wang5"/>
<item android:drawable="@color/colorPrimary"/> </selector>
9、shape和selector结合使用
<?xml version="1.0" encoding="utf-8"? >
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners /> <stroke /> <solid />
</shape>
</item>
</selector>
10、transition ,两张图片间透明度的渐变
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/close">
<item android:drawable="@drawable/open"> </transition>
11、animation-list 逐帧动画
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/v_anim1" android:duration="300"/>
<item android:drawable="@drawable/v_anim2" android:duration="300"/>
<item android:drawable="@drawable/v_anim3" android:duration="300"/>
</animation-list>
代码实现:
二、Interpolator 补间动画(res/anim)
1、AlphaAnimation
2、ScaleAnimation
3、TranslateAnimation
4、RotateAnimation
5、插值器(负责补间动画的平滑过渡)
xml文件:android:interpolator="@android:anim/accelerate_decelerate_interpolator"
6、直接使用插值器
7、动画执行监听回调
8、ViewPropertyAnimator的用法
view中的方法,例如:textview.animate().alpha(0f);
注意:在xml里配置动画属性的时候,有很多属性没有在输入参数列里提示,需要自己手写输入,例如时间 android:duration="",单位毫秒,根据自己的需求手动输入各种隐藏属性。
三、Property Animator 属性动画(res/animator)
1、ValueAnimator
基本用法,四种类型 of(int,float,argb,object):
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 100);
2、ObjectAnimator (ValueAnimator子类)
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(viewGroup, "translationY", toY);
objectAnimator.setDuration(500).start();
3、动画同时执行
4、动画执行监听回调
4、自定义动画效果
四、Transistion Animation 过渡动画(res/transition )
简介:本质是属性动画,实现了二次封装,方便开发者实现Activity或View的过渡动画效果,过渡动画的使用很简单,首先需要准备过渡动画前后两个不同的布局文件,这两个布局文件的根布局具有相同的id属性值。
1、过渡动画
2、实现步骤:
五、ColorSelect(res/color)
<xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="500">
<item android:state_pressed="true" android:color="@color/color_fff" />
</selector>
六、涟漪效果(Ripple)
有边界的涟漪效果:
android:background="?android:attr/selectableItemBackground"
无边界的涟漪效果:
android:background="?android:attr/selectableItemBackgroundBorderless"
自定义涟漪效果:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/color_333">
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/dimen_px_60" />
<solid android:color="@color/color_fff"/>
<stroke android:color="@color/color_c70017"
android:width="@dimen/dimen_px_01"/>
</shape>
</item>
记得设置控件为可点击状态:
android:clickable="true"
七、显示效果(Reveal)
Animator animator = ViewAnimationUtils.createCircularReveal(mImageView,centerX,centerY,startRadius,endRadius);
animator.setDuration(1000);
animator.start();
八、常见问题
Selector的item状态失效,情况1:item的顺序问题,默认的显示效果需要放在最后。情况2:View的本身是否有item中监听的状态,如state_check,Checkbox有该属性,而Button没有该属性,所以Checkbox生效,而Button则不生效。情况3:view的本身有item中监听的状态,但设置后不生效,需要为View设置对应的监听,如state_press,TextView本身有该属性,但按下没有反应,为TextView设置View.OnClickListener后,TextView的state_press状态监听生效,或者在控件添加android:clickable="true"属性。
动画执行后遗留问题,建议使用最新的动画API,如:Animator(三) > Animation(四) > Interpolator(二)。
动画移动的参数坐标是以控件左上角坐标为基准。