Herstellung überlagertes Bild transparent auf Touch in Android?
-
26-09-2019 - |
Frage
Ich brauche Hilfe darauf, die berührten Bereiche von Bitmap-Bild transparent (scheint wie Löschen), während ich auf diesem Bild meinen Finger bewege.
Ich habe eine PNG-Datei mit Alpha-Kanal in ihm. Ich möchte die berührt Pixel transparent drehen, damit kann der Benutzer das Gefühl, dass er es tatsächlich ist, gelöscht werden.
Dazu verwende ich Frame-Layout 2 Schichten zu laden. Down-Schicht ist für den Inhalt und die obere Schicht ist eine Bildansicht zum Löschen. Ich muß die obere Schicht, wenn der Benutzer berühren löschen und mit dem Finger auf sie bewegen.
Ich bin nicht immer, wie es transparent zu machen. Kann jemand mir bitte dabei helfen. Wenn möglich, bitte mich zu jedem Beispielcode lenken, wie ich zu dieser Bildverarbeitung sehr neu bin.
Vielen Dank im Voraus.
Lösung
Sie müssen den PorterDuff-Modus auf einem Farbobjekt setzen:
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC))
und zieht mit Color.TRANSPARENT
Siehe auch diesen Thread in der Android-Entwickler-Gruppe: http: // Gruppen. google.com/group/android-developers/browse_thread/thread/5b0a498664b17aa0/de4aab6fb7e97e38?lnk=gst&q=erase+transparent#
Andere Tipps
Image hat eine setAlpha Methode, die eine ganze Zahl zwischen 0 und 255 nimmt, weiß ich nicht, welche transparent ist und das ist undurchsichtig, aber es sollte eine lange Zeit nicht nehmen, um zu versuchen: P
Es funktioniert, aber Zeichnen Pfad nicht.
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);
}
}
}