[JAVA] Wie man eine Ansicht auf Android "aushöhlt"

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.

Zunächst einmal, wie man View zeichnet

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);
    }
}

Wie man View aushöhlt

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);
    }
}

Schließlich

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

customTarget.gif

Recommended Posts

Wie man eine Ansicht auf Android "aushöhlt"
So verwenden Sie OpenCV 4 unter Android und zeigen die Kamera live an
So erkennen Sie Mikrofonkonflikte unter Android
Passen Sie die Listenansicht auf Android an
Wie man mit Heroku einsetzt
Android-Ansicht
So stellen Sie Laravel für CentOS 7 bereit
Verwendung von Ruby on Rails
So stellen Sie Bootstrap auf Rails bereit
So führen Sie JavaFX unter Docker aus
Verwendung von Bio-Formaten unter Ubuntu 20.04
So installieren Sie MariaDB 10.4 unter CentOS 8
So installieren Sie WildFly unter Ubuntu 18.04
[Android] So erstellen Sie ein Dialogfragment
So überprüfen Sie, ob Java auf einem Mac installiert ist
Ein Memorandum zur Verwendung von Eclipse
Verwendung von binding.pry für die Ansichtsdatei
Verwendung von Apache Derby unter Eclipse
Beispiel für die Anzeige von (Head-up-) Benachrichtigungen auf Android
[Android] Wie man mit dunklen Themen umgeht
So installieren Sie Eclipse (Photon) auf Ihrem Mac
Schritte zum Veröffentlichen einer Anwendung auf Heroku
So wechseln Sie Java-Versionen auf dem Mac
So installieren Sie Beta PHP8.0 unter CentOS8
[Ruby on Rails] Verwendung von redirect_to
So installieren Sie kafkacat unter Amazon Linux2
Verwendung von ExpandableListView in Android Studio
Android 11 unterstützt Reiwa standardmäßig
[Android] So konvertieren Sie eine Zeichenfolge in resourceId
So installieren Sie Netzwerktreiber unter eigenständigem Ubuntu
[Android] So erkennen Sie Lautstärkeänderungen (= Drücken der Lautstärketaste)
Durchsuchen Sie eine Instanz von Tab's View unter Android
So speichern Sie Bilder auf Heroku in S3 unter AWS
Hinweise zur Verwendung der einzelnen JUnit-Regeln
Wie erstelle ich Unity Native Plugin (Android-Version)
Beachten Sie, wie Sie auf Heroku bereitgestelltes MySQL zurücksetzen können
So installieren Sie mehrere JDKs unter Ubuntu 18.04 LTS
[Rails MySQL] So setzen Sie die Datenbank auf Heroku zurück
Wie schreibe ich React Native Bridge ~ Android-Version ~
So erstellen Sie eine Pytorch-Umgebung unter Ubuntu