5 Stimmen

Überlagertes Bild bei Berührung in Android transparent machen?

Ich brauche Hilfe, um die berührten Bereiche eines Bitmap-Bildes transparent zu machen (scheint wie Löschen), während ich meinen Finger auf diesem Bild bewege.

Ich habe eine PNG-Datei mit Alphakanal darin. Ich möchte die berührten Pixel transparent machen, damit der Benutzer das Gefühl hat, dass er sie tatsächlich löscht.

Hierfür verwende ich ein Rahmenlayout, um 2 Ebenen zu laden. Die untere Ebene ist für den Inhalt und die obere Ebene ist ein Imageview zum Löschen. Ich brauche die obere Ebene zu löschen, wenn Benutzer berühren und bewegen Sie seinen Finger auf sie.

Ich bin nicht immer, wie man es transparent zu machen. kann jemand bitte helfen Sie mir in diesem. Wenn möglich, bitte verweisen Sie mich auf ein Beispiel-Code, da ich sehr neu in dieser Bildverarbeitung bin.

Vielen Dank im Voraus.

12voto

Mathias Conradt Punkte 28087

Sie müssen den PorterDuff-Modus für ein Paint-Objekt festlegen:

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)) 

und zeichnen mit Color.TRANSPARENT

Siehe auch diesen Thread in der Android-Entwicklergruppe: http://groups.google.com/group/Android-developers/browse_thread/thread/5b0a498664b17aa0/de4aab6fb7e97e38?lnk=gst&q=erase+transparent#

0voto

molnarm Punkte 9715

ImageView hat eine setAlpha-Methode, die eine ganze Zahl zwischen 0 und 255 nimmt. Ich weiß nicht, was transparent und was undurchsichtig ist, aber es sollte nicht lange dauern, es zu versuchen :P

0voto

Pranav Punkte 3882

Es funktioniert, aber ich habe den Pfad nicht gezeichnet.

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class StartActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(new TouchView(this));

}

class TouchView extends View{
    Bitmap bgr;
    Bitmap overlayDefault;
    Bitmap overlay;
    Paint pTouch;
    int X = -100;
    int Y = -100;
    Canvas c2;

    public TouchView(Context context) {
        super(context);

        bgr = BitmapFactory.decodeResource(getResources(),R.drawable.bgr);
        overlayDefault = BitmapFactory.decodeResource(getResources(),R.drawable.over);
        overlay = BitmapFactory.decodeResource(getResources(),R.drawable.over).copy(Config.ARGB_8888, true);  
        c2 = new Canvas(overlay);

        pTouch = new Paint(Paint.ANTI_ALIAS_FLAG);         
        pTouch.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT)); 
        pTouch.setColor(Color.TRANSPARENT);
        pTouch.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL));

    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) {

            case MotionEvent.ACTION_DOWN: {

                X = (int) ev.getX();
                Y = (int) ev.getY();
                invalidate();

                break;
            }

            case MotionEvent.ACTION_MOVE: {

                    X = (int) ev.getX();
                    Y = (int) ev.getY();
                    invalidate();
                    break;

            }           

            case MotionEvent.ACTION_UP:

                break;

        }
        return true;
    }

    @Override
    public void onDraw(Canvas canvas){
        super.onDraw(canvas);

        //draw background
        canvas.drawBitmap(bgr, 0, 0, null);
        //copy the default overlay into temporary overlay and punch a hole in it                          
        c2.drawBitmap(overlayDefault, 0, 0, null); //exclude this line to show all as you draw
        c2.drawCircle(X, Y, 80, pTouch);
        //draw the overlay over the background  
        canvas.drawBitmap(overlay, 0, 0, null);

    }

}

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X