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...