一、LinearGradient的特性和使用方法
LinearGradient可以為一個畫筆Paint所使用,根據設定的開始和結束顏色,來產生一個顏色漸變的效果。而具體的變化方式,由設置的Shader對象所決定。
在使用時,我們通過LinearGradient的構造方法,可以指定其開始顏色、結束顏色和漸變方向。
/** * 通過LinearGradient構造方法創建一個漸變對象 * * @param x0 漸變起始點x坐標 * @param y0 漸變起始點y坐標 * @param x1 漸變結束點x坐標 * @param y1 漸變結束點y坐標 * @param colors 漸變顏色的數組 * @param positions 漸變顏色的相對位置數組,可為null * @param tile 漸變平鋪模式 */ public LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, TileMode tile)
其中參數意義如下:
- x0:漸變起始點的X坐標
- y0:漸變起始點的Y坐標
- x1:漸變結束點的X坐標
- y1:漸變結束點的Y坐標
- colors:漸變顏色數組
- positions:漸變顏色相對位置數組
- tile:漸變平鋪模式
二、通過LinearGradient實現漸變背景
為LinearLayout等布局控制項添加漸變背景色,我們可以使用以下方法實現:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LinearLayout layout = findViewById(R.id.layout); int colorStart = ContextCompat.getColor(this, R.color.colorStart); int colorEnd = ContextCompat.getColor(this, R.color.colorEnd); GradientDrawable drawable = new GradientDrawable(); drawable.setOrientation(GradientDrawable.Orientation.LEFT_RIGHT); drawable.setColors(new int[]{colorStart, colorEnd}); layout.setBackground(drawable); }
其中,colorStart和colorEnd分別表示漸變的起始顏色和結束顏色,我們使用setOrientation方法可以設置漸變方向,本例中為從左往右漸變。通過setColors方法設置顏色數組,GradientDrawable會根據顏色數組自動設置對應的 positions 數組。最後通過setBackground方法設置背景為GradientDrawable對象。
三、實現不同的漸變效果
對於不同的需求,我們可以通過在構造方法中設置不同的參數,來實現不同的漸變效果:
1. 圓形漸變
int[] colors = {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}; float[] position = {0, 0.3f, 0.6f, 1.f}; Shader shader = new RadialGradient(300, 300, 200, colors, position, Shader.TileMode.CLAMP); Paint paint = new Paint(); paint.setShader(shader); canvas.drawCircle(300, 300, 200, paint);
在創建RadialGradient對象時,參數依次代表中心點位置的X、Y坐標、半徑、顏色數組和相對位置數組,最後指定平鋪模式。
繪製圓形時,通過繪製一個圓形的路徑(或使用canvas提供的drawCircle方法),設置用RadialGradient對象作為畫筆,繪製圓形圖像,即可實現圓形漸變效果。
2. 掃描漸變
int[] colors = {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}; float[] position = {0, 0.3f, 0.6f, 1.f}; Shader shader = new SweepGradient(300, 300, colors, position); Paint paint = new Paint(); paint.setShader(shader); canvas.drawCircle(300, 300, 200, paint);
在創建SweepGradient對象時,參數依次代表中心點位置的X、Y坐標、顏色數組和相對位置數組。
繪製掃描漸變時,通過繪製一個圓形的路徑(或使用canvas提供的drawCircle方法),設置用SweepGradient對象作為畫筆,繪製圓形圖像,即可實現掃描漸變效果。
3. 線性漸變
int[] colors = {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}; float[] position = {0, 0.3f, 0.6f, 1.f}; Shader shader = new LinearGradient(0, 0, 500, 500, colors, position, Shader.TileMode.MIRROR); Paint paint = new Paint(); paint.setShader(shader); canvas.drawPath(path, paint);
在創建LinearGradient對象時,參數依次代表起始點的位置X、Y坐標、結束點的位置X、Y坐標、顏色數組和相對位置數組,最後指定平鋪模式。
繪製線性漸變時,可以通過繪製一個路徑對象,設置用LinearGradient對象作為畫筆,繪製路徑圖像,即可實現線性漸變效果。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/313010.html