Añadir efecto de rizado para View en onClick

Hola Estoy tratando de agregar un método onClick de efecto ripple para View, pero este no funciona. Todos mis artículos tienen una identificación, pero no sé cómo llamarla

Aquí hay un código.

@Override public void onClick(View v) { int[] attrs = new int[]{R.attr.selectableItemBackground}; TypedArray typedArray = getActivity().obtainStyledAttributes(attrs); int backgroundResource = typedArray.getResourceId(0, 0); v.setBackgroundResource(backgroundResource); switch (v.getId()) { case ACTION_PLAY_ID: Log.d(MainActivity.TAG, getString(R.string.detail_action_play)); v.setBackgroundResource(backgroundResource); Intent intent = new Intent(getActivity(), PlayerActivity.class); intent.putExtra(Video.VIDEO_TAG, videoModel); startActivity(intent); break; case ACTION_BOOKMARK_ID: if (bookmarked) { v.setBackgroundResource(backgroundResource); deleteFromBookmarks(); ((ImageView) v).setImageDrawable(res.getDrawable(R.drawable.star_outline)); } else { v.setBackgroundResource(backgroundResource); addToBookmarks(); ((ImageView) v).setImageDrawable(res.getDrawable(R.drawable.star)); } break; case ACTION_REMINDER_ID: if (!isReminderSet) { createReminderDialog((ImageView) v); } else { cancelReminder(liveTvProgram.getProgramId()); ((ImageView) v).setImageDrawable(res.getDrawable(R.drawable.alarm)); } break; } } 

Para Lubomir

Tengo algo como esto pero no funciona demasiado:

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.item_detail, container, false); ButterKnife.bind(this, view); View myView = view.findViewById(R.id.actions_container); int[] attrs = new int[]{R.attr.selectableItemBackground}; TypedArray typedArray = getActivity().obtainStyledAttributes(attrs); int backgroundResource = typedArray.getResourceId(0, 0); myView.setBackgroundResource(backgroundResource); loadImage(); init(); return view; } 

ImageViews (actionbuttons) está creando en java para LinearLayout actions_container

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/header_image" android:layout_width="250dp" android:layout_height="250dp" android:layout_alignParentLeft="true" android:layout_marginLeft="10dp" android:layout_marginStart="10dp" android:layout_marginTop="@dimen/detail_image_1_state" android:elevation="8dp"/> <RelativeLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="@dimen/detail_bottom_margin" android:layout_marginTop="@dimen/detail_top_margin" android:background="@color/primary_color"> <LinearLayout android:id="@+id/actions_container" android:layout_width="match_parent" android:layout_height="@dimen/detail_actions_height" android:layout_alignParentTop="true" android:background="@drawable/ripple_effect_image" android:elevation="2dp" android:orientation="horizontal" android:paddingLeft="300dp" android:paddingStart="300dp"/> <LinearLayout android:id="@+id/content_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/actions_container" android:orientation="vertical" android:paddingLeft="300dp" android:paddingStart="300dp"> <TextView android:id="@+id/title" style="@style/TextTitleStyle" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/subtitle" style="@style/TextSubtitleStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone"/> <TextView android:id="@+id/duration" style="@style/TextSubtitleStyle" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/season" style="@style/TextDescriptionStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone"/> <TextView android:id="@+id/episode" style="@style/TextDescriptionStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone"/> <TextView android:id="@+id/description" style="@style/TextDescriptionStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="7"/> </LinearLayout> <FrameLayout android:id="@+id/recommended_frame" android:layout_width="match_parent" android:layout_height="200dp" android:layout_alignParentBottom="true"> <android.support.v17.leanback.widget.HorizontalGridView android:id="@+id/recommendation" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipChildren="false" android:clipToPadding="false" android:paddingLeft="10dp" android:paddingRight="10dp"/> </FrameLayout> <TextView android:id="@+id/recommended_text" style="@style/TextHeaderStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/recommended_frame" android:text="@string/related_programs"/> </RelativeLayout> </RelativeLayout> 

También mi archivo de efecto ripple xml es como:

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/dark_primary_color"> <item> <color android:color="@color/dark_primary_color" /> </item> <item android:id="@android:id/mask"> <shape android:shape="rectangle"> <solid android:color="?android:colorAccent" /> </shape> </item> </ripple> 

Vistas con clic

En general, el efecto de rizado para los botones regulares funcionará de forma predeterminada en API 21 y para otras vistas con capacidad de tocar, se puede lograr especificando

 android:background="?android:attr/selectableItemBackground"> 

En codigo:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); View myView = findViewById(R.id.myView); int[] attrs = new int[]{R.attr.selectableItemBackground}; TypedArray typedArray = getActivity().obtainStyledAttributes(attrs); int backgroundResource = typedArray.getResourceId(0, 0); myView.setBackgroundResource(backgroundResource); } 

Puedes añadir:

  <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:background="@drawable/ripple"/> 

Crear ripple fondo

View_background.xml

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/blue" > <item android:drawable="@drawable/view_normal"> </item> </ripple> 

View_noraml.xml // esta es la forma en que usted ve aparece en normal

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="@dimen/button_corner"/> <solid android:color="@android:color/transparent"/> <stroke android:width="0.5dp" android:color="@color/white"/> </shape> 

Ahora establece el view_background en tu vista

ejemplo

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="120dp" android:foreground="@drawable/view_background" android:clickable="true" android:focusable="true" > <ImageView android:id="@+id/grid_item_imageView" android:layout_width="match_parent" android:layout_height="120dp" android:layout_gravity="center" android:scaleType="centerInside" /> </FrameLayout> 

La solución para esto es simple fácil en mi lado.

Aquí está el efecto de la ondulación:

  <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#BFB3F7"> <item android:id="@android:id/mask"> <shape android:shape="oval"> <solid android:color="@color/button_background_color" /> </shape> </item> </ripple> 

Y luego en la clase necesito buscar la función setBackground

Entonces necesito declarar un artículo drawable a él. algo como esto:

  @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { v.setBackground(res.getDrawable(R.drawable.ripple_effect_for_buttons)); scrollContainer(false); } else { v.setBackground(null); if (recommendation.getFocusedChild() != null) { scrollContainer(true); } } } 

Y YUPII su trabajo

  • El controlador no pudo establecer una conexión segura con SQL Server mediante el cifrado de Secure Sockets Layer (SSL)
  • Receptor de alarma y el manifiesto de Android
  • Android: tener autoridad de proveedor en el proyecto de la aplicación
  • Xamarin C # - Android - Impedir que un AlertDialog cierre en PositiveButton haga clic
  • Realizar un cálculo en Java da una respuesta completamente errónea
  • AutoCompleteTextView onItemSelectedListener no funciona
  • Cómo rotar un objeto Rect en Android
  • Android java apoyo lambda expresión en java 8?
  • Activos de Android sin contexto
  • ¿Cómo acceder a las cadenas de recursos de la cadena ToString de enum en Android?
  • ¿Por qué los valores de latitud y longitud se convierten a 1E6?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.