如何为 RecyclerView 创建一个发光的选择器?
How to create a glowing selector for RecyclerView?
我需要让 RecyclerView 的项目在聚焦时发光。
像这样
9 补丁不是一个合适的解决方案,因为具有透明度的图像并不总是方形的。
使用此 answer 中的代码,我创建了一个实用程序 class。
public class GlowEffectUtils {
@NonNull
public static Drawable createSelector(@NonNull Resources resources, @NonNull View view) {
Bitmap glow = createGlow(view);
StateListDrawable selector = new StateListDrawable();
BitmapDrawable glowDrawable = new BitmapDrawable(resources, glow);
selector.addState(new int[]{android.R.attr.state_focused}, glowDrawable);
return selector;
}
@NonNull
private static Bitmap createGlow(@NonNull View view) {
int glowRadius = 15;
int glowColor = Color.rgb(255, 255, 255);
Bitmap src = createBitmap(view);
Bitmap alpha = src.extractAlpha();
Bitmap bmp = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
Paint paint = new Paint();
paint.setColor(glowColor);
paint.setMaskFilter(new BlurMaskFilter(glowRadius, BlurMaskFilter.Blur.OUTER));
canvas.drawBitmap(alpha, 0, 0, paint);
return bmp;
}
@NonNull
private static Bitmap createBitmap(View v) {
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.draw(c);
return b;
}
}
然后这样设置:
Resources resources = itemView.getContext().getResources();
Drawable selector = GlowEffectUtils.createSelector(resources, itemView);
itemView.setBackground(selector);
我需要让 RecyclerView 的项目在聚焦时发光。
像这样
9 补丁不是一个合适的解决方案,因为具有透明度的图像并不总是方形的。
使用此 answer 中的代码,我创建了一个实用程序 class。
public class GlowEffectUtils {
@NonNull
public static Drawable createSelector(@NonNull Resources resources, @NonNull View view) {
Bitmap glow = createGlow(view);
StateListDrawable selector = new StateListDrawable();
BitmapDrawable glowDrawable = new BitmapDrawable(resources, glow);
selector.addState(new int[]{android.R.attr.state_focused}, glowDrawable);
return selector;
}
@NonNull
private static Bitmap createGlow(@NonNull View view) {
int glowRadius = 15;
int glowColor = Color.rgb(255, 255, 255);
Bitmap src = createBitmap(view);
Bitmap alpha = src.extractAlpha();
Bitmap bmp = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
Paint paint = new Paint();
paint.setColor(glowColor);
paint.setMaskFilter(new BlurMaskFilter(glowRadius, BlurMaskFilter.Blur.OUTER));
canvas.drawBitmap(alpha, 0, 0, paint);
return bmp;
}
@NonNull
private static Bitmap createBitmap(View v) {
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.draw(c);
return b;
}
}
然后这样设置:
Resources resources = itemView.getContext().getResources();
Drawable selector = GlowEffectUtils.createSelector(resources, itemView);
itemView.setBackground(selector);