Android Shader填充图形

来源:互联网 发布:SEO优化 编辑:程序博客网 时间:2024/05/28 05:14

本文内容摘自《疯狂Android讲义 第3版》李刚 著
这里写图片描述

package shortcut.song.com.myapplication;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;/** * Created by Administrator on 2017/7/17 0017. */public class ShaderView extends View {    public Paint paint;    public ShaderView(Context context, AttributeSet set)    {        super(context, set);        paint = new Paint();        paint.setColor(Color.RED);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawRect(0,0,getWidth(), getHeight(),paint);    }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="shortcut.song.com.myapplication.ShaderActivity">    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content">        <Button            android:id="@+id/btn_1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="1" />        <Button            android:id="@+id/btn_2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="2"/>        <Button            android:id="@+id/btn_3"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="3"/>        <Button            android:id="@+id/btn_4"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="4"/>        <Button            android:id="@+id/btn_5"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="5"/>    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <shortcut.song.com.myapplication.ShaderView            android:id="@+id/my_shaderview"            android:layout_width="800dp"            android:layout_height="400dp"            />    </LinearLayout></LinearLayout>
package shortcut.song.com.myapplication;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.BitmapShader;import android.graphics.Color;import android.graphics.ComposeShader;import android.graphics.LinearGradient;import android.graphics.PorterDuff;import android.graphics.RadialGradient;import android.graphics.Shader;import android.graphics.SweepGradient;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class ShaderActivity extends Activity implements View.OnClickListener{    private Shader[] shaders = new Shader[5];    private int[] colors;    ShaderView shaderView ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_shader);        shaderView = (ShaderView)findViewById(R.id.my_shaderview);        //获得Bitmap实例        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.plane);        //设置渐变颜色组,红、绿、蓝        colors=new int[]{Color.RED, Color.GREEN, Color.BLUE};        //实例化BitmapShader, x方向重复图形, y方向镜像图形        shaders[0] = new BitmapShader(bitmap, Shader.TileMode.REPEAT,Shader.TileMode.MIRROR);        shaders[1] = new LinearGradient(0, 0, 100, 100, colors, null,Shader.TileMode.REPEAT);        shaders[2] = new RadialGradient(100, 100, 80, colors, null, Shader.TileMode.REPEAT);        shaders[3] = new SweepGradient(160, 160, colors, null);        shaders[4] = new ComposeShader(shaders[1], shaders[2], PorterDuff.Mode.DARKEN);        Button btn1 = (Button)findViewById(R.id.btn_1);        Button btn2 = (Button)findViewById(R.id.btn_2);        Button btn3 = (Button)findViewById(R.id.btn_3);        Button btn4 = (Button)findViewById(R.id.btn_4);        Button btn5 = (Button)findViewById(R.id.btn_5);        btn1.setOnClickListener(this);        btn2.setOnClickListener(this);        btn3.setOnClickListener(this);        btn4.setOnClickListener(this);        btn5.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch(v.getId())        {            case R.id.btn_1:                shaderView.paint.setShader(shaders[0]);                break;            case R.id.btn_2:                shaderView.paint.setShader(shaders[1]);                break;            case R.id.btn_3:                shaderView.paint.setShader(shaders[2]);                break;            case R.id.btn_4:                shaderView.paint.setShader(shaders[3]);                break;            case R.id.btn_5:                shaderView.paint.setShader(shaders[4]);                break;        }        //通知重绘组件        shaderView.invalidate();    }}

BitmapShader
LinearGradient
RadialGradient
SweepGradient
ComposeShader

原创粉丝点击