一、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(二)。
動畫移動的參數坐標是以控件左上角坐標為基準。