복붙노트

[ANDROID] 터치에 비트 맵의 ​​특정 영역을 투명하게

ANDROID

터치에 비트 맵의 ​​특정 영역을 투명하게

해결법


  1. 1.

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

  2. 2.훗, 당신은 당신의 포스트 안에 응답 권리가있어!

    훗, 당신은 당신의 포스트 안에 응답 권리가있어!

    기본적으로 뭔가를 시도 :

    public void onDraw(Canvas canvas) {    
        if (myPaintFlag) {
            canvas.drawBitmap(bmp1, new Matrix(), null);
            canvas.drawBitmap(bmp2, new Matrix(), mPaint);
        }
        else {
            canvas.drawBitmap(bmp1, new Matrix(), mPaint);
            canvas.drawBitmap(bmp2, new Matrix(), null);
        }   
    }
    
  3. from https://stackoverflow.com/questions/5368774/make-certain-area-of-bitmap-transparent-on-touch by cc-by-sa and MIT license