在图像视图上设置涟漪效果

得到以下图片视图:

 

如果我没有为图像视图设置位图,则Ripple工作得很好。 但是一旦我设置了这样的位图,涟漪效应就消失了:

 ImageView iv=((ImageView)rootView.findViewById(R.id.header)); iv.setImageBitmap(myBitmap); 

这是我的ripple.xml:

        

我猜这个位图隐藏了涟漪效应,我怎样才能让它可见? 已经尝试过:

  1. android:background更改为android:foreground,这不起作用。
  2. 在此顶部配置另一个透明ImageView,但由于它是透明的纹波未显示。

有任何想法吗? 我见过Lollipop Contacts也是这样做的。

    我有一个图像库(使用RecyclerViewGridLayoutManager构建)。 使用Picasso设置图像。 为了给图像添加纹波, 我用FrameLayout包装了ImageView 。 项目布局是:

        

    注意android:foreground 。 它与android:background 。 我试过没有 android:clickable="true"android:focusable="true"它也有效 ,但它并没有伤害。

    然后将一个ripple.xml drawable添加到res/drawable

                 

    请注意,当选择项目时,这会在图像顶部显示半透明颜色(适用于版本低于Android 5.0的设备)。 如果您不想要,可以将其删除。

    然后将带有ripple的ripple.xml drawable添加到res/drawable-v21

       

    您可以使用默认的涟漪效应而不是自定义的ripple.xml ,但是在图像上很难看到,因为它是灰色的:

     android:foreground="?android:attr/selectableItemBackground" 

    你可以实现它,将drawable包装在RippleDrawable中。

     ImageView iv=((ImageView)rootView.findViewById(R.id.header)); Drawable image = .... // your image. RippleDrawable rippledImage = new RippleDrawable(ColorStateList.valueOf(rippleColor), image, null); iv.setImageDrawable(rippledImage) 

    ;

    对于像我这样懒惰的人:

     android:foreground="?android:attr/selectableItemBackground" 

    并根据您的风格定制波纹颜色。

    在values / styles.xml中

      

    然后,在onCreateView()中充气之前的片段中:

     @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getContext().getTheme().applyStyle(R.style.colorControlHighlight_blue, true); //blue ripple color View view = inflater.inflate(R.layout.my_fragment_layout, container, false); return view; } 

    通过循环效果试试这个: