Android線性漸變
布局實現:
1. 在res中建立drawable文件夾。
2. 在drawable文件夾中建立shape.xml。
3. shape.xml的代碼如下:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:angle="270" android:centerColor="#77333333" android:centerX="0.5" android:centerY="0.5" android:endColor="#ff666666" android:startColor="#ff666666" android:type="linear" /> <corners android:radius="5dip" /> </shape>
4. shape的值有四種:rectangle-矩形;oval-橢圓;line-線;ring-環。
5. angle的值:從左到右為0;然後逆時針旋轉,90度為從下到上,270為從上到下。
6. centerx和centery的值取0-1;表示中間點的位置,如下面三幅圖:中間點分別是0,0.5,1。中間點為0的,則漸變的中間色的位置在最上面;中間點為0.5的,則漸變的中間色在屏幕中間;中間點為1 的,則中間點在屏幕下部。
7. startcolor、centercolor、endcolor為漸變色的開始、中間、最後的顏色值。
8. type的值有三種:linear-線性;radial-徑向;sweep-3D效果。
9. color的radius值表示邊角的弧度半徑。
代碼實現:
一、LinearGradient線性漸變
在android平臺中提供了兩種重載方式來實例化該類分別為,他們的不同之處為參數中第一種方法可以用顏色數組,和位置來實現更細膩的過渡效果,比如顏色采樣int[] colors數組中存放20種顏色,則漸變將會逐一處理。而第二種方法參數僅為起初顏色color0和最終顏色color1。
LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
使用實例如下:
Paint p=new Paint();
LinearGradient lg=new LinearGradient(0,0,100,100,Color.RED,Color.BLUE,Shader.TileMode.MIRROR); //
參數一為漸變起初點坐標x位置,參數二為y軸位置,參數三和四分辨對應漸變終點,最後參數為平鋪方式,這裏設置為鏡像.
剛才Android開發網已經講到Gradient是基於Shader類,所以我們通過Paint的setShader方法來設置這個漸變,代碼
如下:
p.setShader(lg);
canvas.drawCicle(0,0,200,p); //參數3為畫圓的半徑,類型為float型。
二、 RadialGradient鏡像漸變
有了上面的基礎,我們一起來了解下徑向漸變。和上面參數唯一不同的是,徑向漸變第三個參數是半徑,其他的和線性漸變
相同。
RadialGradient(float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile)
RadialGradient(float x, float y, float radius, int color0, int color1, Shader.TileMode tile)
三、 SweepGradient角度漸變
對於一些3D立體效果的漸變可以嘗試用角度漸變來完成一個圓錐形,相對來說比上面更簡單,前兩個參數為中心點,然後通過載入的顏色來平均的漸變渲染。
SweepGradient(float cx, float cy, int[] colors, float[] positions) //對於最後一個參數SDK上的描述為May be NULL. The relative position of each corresponding color in the colors array, beginning with 0 and ending with 1.0. If the values are not monotonic, the drawing may produce unexpected results. If positions is NULL, then the colors are automatically spaced evenly.,所以Android123建議使用下面的重載方法,本方法一般為NULL即可。
SweepGradient(float cx, float cy, int color0, int color1)
Android線性漸變