Verschiedene Ansichtsformen können mithilfe von canvas realisiert werden, das von API Level 1 von Android bereitgestellt wird. Ist die allgemeine Verwendung nicht das Erstellen einer Ansicht wie eines Kreises oder eines Rechtecks oder das Ausschneiden einer Bitmap? Dieses Mal möchte ich Ihnen vorstellen, wie Sie die Ansicht aushöhlen können.
public class CanvasView extends View {
private Paint paint = new Paint();
public CanvasView(Context context) {
super(context);
}
public CanvasView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CanvasView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(getRootView().getWidth() / 2, getRootView().getHeight() / 2, 50, paint);
}
}
public class CanvasView extends View {
private Paint backgroundPaint = new Paint();
private Paint paint = new Paint();
public CanvasView(Context context) {
super(context);
}
public CanvasView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CanvasView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
setLayerType(View.LAYER_TYPE_HARDWARE, null);
//Zeichne das Ganze
backgroundPaint.setColor(ContextCompat.getColor(getContext(), android.R.color.background_dark));
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), backgroundPaint);
//Aus dem gesamten Hintergrund einen Kreis aushöhlen
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawCircle(getWidth() / 2, getHeight() / 2, 250, paint);
}
}
Ich habe eine Bibliothek mit der hier vorgestellten Methode erstellt. Wenn es Ihnen gefällt, wäre ich Ihnen dankbar, wenn Sie ihm einen Stern geben könnten.
https://github.com/TakuSemba/Spotlight
Recommended Posts