Red de conocimiento informático - Conocimiento informático - ¿Cómo hacer que todas las vistas tengan un efecto dominó en el que se puede hacer clic?

¿Cómo hacer que todas las vistas tengan un efecto dominó en el que se puede hacer clic?

V2EX?Android

¿Cómo hacer que todas las vistas tengan un efecto dominó en el que se puede hacer clic?

AtlantisZ? - 2015-11-12 23:49:00 08:00

Este fue un tema creado hace 483 días y la información que contiene puede haber evolucionado o cambiado.

Según la documentación oficial de G?

¿Retroalimentación táctil personalizada?

Cuando los usuarios interactúan con elementos de la interfaz de usuario, la retroalimentación háptica en Material Design proporcionará una confirmación visual instantánea en el punto de contacto. La animación táctil predeterminada del botón utiliza la nueva clase RippleDrawable para realizar la transición entre estados con un efecto dominó.

En la mayoría de los casos, debe aplicar esta funcionalidad especificando el fondo de la vista en el XML de la vista:? android:attr/selectableItemBackground especificando la onda limitada? android: attr/selectableItemBackgroundBorderless especifica una onda fuera de límites?

Nota: selectableItemBackgroundBorderless es una nueva propiedad introducida en el nivel 21 de API.

Alternativamente, puedes definir un RippleDrawable como un recurso XML usando el elemento ripple.

Puedes especificar un color para un objeto RippleDrawable. Para cambiar el color de respuesta táctil predeterminado, utilice el atributo android:colorControlHighlight del tema.

¿Pero resulta que a veces LinearLayout establece android:background="?android:attr/selectableItemBackground"?

Pero resulta que a veces LinearLayout establece android:background="?

El uso de esta propiedad para el diseño raíz del diseño del elemento de RecyclerView tampoco tiene ningún efecto.

Luego fui y volví a la respuesta que encontré en Stackflow, pero tampoco funcionó. .? /p>

Vista de FrameLayout = (FrameLayout) View.inflate(context, R.layout.item_top_news, null);?

RippleDrawable dibujable = (RippleDrawable) mActivity.getResources()?

.getDrawable(R.drawable.ripple_background);?

view.setClickable(true);?

view.setForeground(drawable);?

Cómo lograr el efecto dominó del agua para casi cada clic de Ver en el cliente BiliBili MD.

Ripple

attr

Android

drawable

12 respuestas ?|?Hasta el 19/11/2015 21:41:40 08:00

1

little_cup 2015-11-13 00:04:55 08:00

Desde el punto de vista del diseño, ¿No debería tener todas las Vistas con el efecto Dominó, solo los elementos en los que se puede hacer clic?

Desde una perspectiva de programación, no puede tener todas las Vistas con el efecto Dominó, solo los elementos en los que se puede hacer clic. El elemento tiene un efecto dominó.

2

AtlantisZ 2015-11-13 00:15:38 08:00

@little_cup?Eh, siento que es difícil tener una Breve descripción de texto del problema, y ​​resulta que el título es cómo hacer que los subelementos de RecyclerView adquieran el efecto dominó. ¿Esto parece demasiado limitante...?

Ahora, los subelementos de RecyclerView pueden saltar a Actividad en respuesta a eventos de clic, entonces, ¿cómo puedo generar un efecto dominó en los clics? Cambié android:background="?android:attr/selectableItemBackground" en el diseño raíz del elemento, pero no funcionó.

3

little_cup 2015-11-13 00:25:24 08:00

@AtlantisZ?Establezca seleccionableItemBackground a la vista que vincule el clic. vista cuyo fondo de proyecto está configurado para vincular clics. Por supuesto, tenga cuidado de no tapar esto visualmente con otras vistas.

4

AtlantisZ 2015-11-13 00:42:01 08:00

¿En onBindViewHolder?

TypedValue typedValue = nuevo TypedValue();?

mactivity.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, typedValue, true);?

Fondo dibujable = getResources().getDrawable( typedValue.resourceId);?

// Fondo dibujable = getResources().getDrawable(R.drawable.ripple_background);?

holder.rootView.setBackground(fondo);?

holder.rootView.setOnClickListener(new View.OnClickListener() {?

@Override?

public void onClick(View v) {?

startActivity(new Intent(getContext(), VideoDetailActivity.class));?

// ToastUtils.showToast(mActivity, "av::" mRecommendList.get(position).av);?

}?

});?

Aún no funciona.

5

AtlantisZ 2015-11-13 11:17:22 08:00

@little_cup?

¿En onBindViewHolder?

TypedValue typedValue = new TypedValue();?

mactivity.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, typedValue, true);?

Fondo dibujable = getResources().getDrawable(typedValue.resourceId);?

// Fondo dibujable = getResources().getDrawable(R.drawable.ripple_background);?

titular .rootView.setBackground(fondo);?

holder.rootView.setOnClickListener(new View.OnClickListener() {?

@Override?

public void onClick (Ver v) {?

startActivity(new Intent(getContext(), VideoDetailActivity.class));?

}?

});?

Aún no funciona.

6

miao1007 2015-11-15 19:55:46 08:00

¿No es esto un error?

El error ClassNoFound ocurre cuando la API está baja

7

ybjaychou 2015-11-17 20:53:35 08:00

También estoy muy preocupado por este problema. También está en el elemento de RecyclerView. No sé cómo tener un efecto de clic, incluso si no es una marca de agua.

Por cierto, cómo realizar operaciones de selección múltiple en RecyclerView y luego mostrar los botones de operación en la parte superior de la barra de herramientas, no sé si alguien lo ha hecho

8

ecmadao 2015-11-18 19:01:06 08:00

Igual que arriba, respecto a las ondas y clics, no sé si será problema del SDK versión. ¿No sé si es un problema con la versión del SDK?

Actualmente existe un proyecto de código abierto en github que puede hacer esto.

/balysv/material-ripple

9

ecmadao 2015-11-18 19:05:55 08:00

@ ¿ybjaychou?

Yo mismo agregué una casilla de verificación en itemView. Por lo general, está oculto; cuando se requiere una eliminación masiva, vuelvo a cargar RecyclerView para mostrar la casilla de verificación. El evento de clic de la casilla de verificación arroja la identificación del elemento en una matriz, para que sepa qué elementos se seleccionaron.

La barra de herramientas se puede cambiar a través de onPrepareOptionsMenu e invalidateOptionsMenu() o ActionMode.Callback.

Con este método, necesitas optimizar el clic en la casilla de verificación para evitar el problema de error de casilla de verificación cuando la lista se desliza

10

ybjaychou 2015-11- 19 12 :52:08 08:00 a través de Android

@ecmadao? Ok, gracias, lo intentaré!

11

AtlantisZ 2015-11-19 16:49:47 08:00

@ybjaychou?

@ecmadao?

Consulte ?/questions/26961147/touch-feedback-with-recyclerview-and-cardview/29033353 para resolver el problema de que el elemento en RecyclerView no tiene un efecto de onda de agua.

12

ecmadao 2015-11-19 21:41:40 08:00

@AtlantisZ

¡GRACIAS!