Paint API de Android - ColorFilter (filtro de color) (3-3)

Introducción a esta sección:

El color se usa aquí, y está bien configurarlo directamente. Escribamos un ejemplo simple a continuación. ¡Tomamos 6 colores diferentes y probamos 18 modos! Documentación oficial de la API: PorterDuffColorFilter  Podemos ver que la clave está en su método de construcción:


1. Ejemplo de código de prueba:

Diagrama de efecto de carrera :

Implementación de código :

Aquí usamos un GridView para instalarlos, primero escribamos el diseño de cada elemento: view_item.xml :

<?versión xml="1.0" codificación="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height ="match_parent" 
    android:orientation="vertical"> 

    <ImageView 
        android:id="@+id/img_show" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@mipmap/ic_launcher" / > 

    <TextView 
        android:id="@+id/tv_color" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:gravity="center_vertical"  
        android:textSize="12sp"
        android:text="颜色"
        android:textColor="#FFFFFFFF" /> 

    <TextView 
        android:id="@+id/tv_mode" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textColor="#FFD9ECFF" 
        android:text="模式"/> 

</LinearLayout>

Luego escribimos una clase de negocio POJO: Data.java :

/** 
 * Creado por Jay el 29/10/2015 0029. 
 */ 
public class Data { 
    private int color; 
    modo privado PorterDuff.Mode; 

    Datos públicos () { 
    } 

    Datos públicos (int color, modo PorterDuff.Mode) { 
        this.color = color; 
        este.modo = modo; 
    } 

    public int getColor() { 
        color de retorno; 
    } 

    public PorterDuff.Mode getMode() { 
        modo de retorno; 
    } 

    public void setColor(int color) { 
        this.color = color; 
    } 

    public void setMode(PorterDuff.Mode mode) { 
        this.mode = mode; 
    } 
}

En cuanto a la clase Adapter, usaremos la clase BaseAdapter personalizada reutilizable que escribimos antes, por lo que no la publicaremos aquí, pero debemos agregar más métodos:

/** 
 * 设置ColorFilter 
 * */ 
public ViewHolder setColorFilter(int id,int color,PorterDuff.Mode mode){ 
    View view = getView(id); 
    if (ver instancia de ImageView) { 
        ((ImageView) ver).setColorFilter(color,modo); 
    } 
    devuelve esto; 
}

El siguiente es nuestro archivo de diseño principal: activity_main.xml :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <GridView 
        android:id ="@+id/gd_show" 
        android:background="#FF333333" 
        android:numColumns="6" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"/> 

</LinearLayout>

Finalmente, nuestra clase MainActivity.java , llenando datos y configurando Adapter, es muy simple:

Clase pública MainActivity extiende AppCompatActivity { 

    Private GridView gd_show; 
    elementos de ArrayList<Data> privados = nulo; 
    privado MyAdapter<Data> myAdapter = null; 

    @Override 
    protected void onCreate(Paquete de estado de instancia guardado) { 
        super.onCreate(estado de instancia guardado); 
        setContentView(R.diseño.actividad_principal); 
        gd_show = (GridView) findViewById(R.id.gd_show); 

        //填充数据,遍历Mode模式:
        items = new ArrayList<Data>(); 
        para (modo PorterDuff.Mode: PorterDuff.Mode.class.getEnumConstants()) { 
            items.add(new Data(0x77E50961, mode)); 
            items.add(nuevos datos(0xFFE50961, modo));
            items.add(nuevos datos(0x77FFFFFF, modo));
            items.add(nuevos Datos(0xFFFFFFFF, modo)); 
            items.add(nuevos datos(0x77000000, modo)); 
            items.add(nuevos datos(0xFF000000, modo)); 
        } 
        myAdapter = new MyAdapter<Data>(items, R.layout.view_item) { 
            @Override 
            public void bindView(ViewHolder holder, Data obj) { 
                holder.setColorFilter(R.id.img_show, obj.getColor(), obj.getMode ()); 
                titular.setText(R.id.tv_color, String.format("%08X", obj.getColor())); 
                titular.setText(R.id.tv_mode, obj.getMode().toString()); 
            } 
        }; 
        gd_show.setAdapter(miAdaptador);
    } 
}

La animación anterior puede ser demasiado rápida. A veces, los lectores la revisan y separan las capturas de pantalla aquí. Debido a que no puedo encontrar una herramienta útil de captura de pantalla de pantalla completa, solo puedo capturarla en secciones...

Supongo que te gusta

Origin blog.csdn.net/leyang0910/article/details/131771184
Recomendado
Clasificación