Pergunta

Preciso de ajuda para fazer as áreas tocadas da imagem de bitmap transparente (parece apagar) enquanto estou movendo o dedo nessa imagem.

Estou tendo um arquivo PNG com canal alfa. Quero transformar os pixels tocados para transparentes para que o usuário possa sentir que ele está realmente apagando.

Para isso, estou usando o layout do quadro para carregar 2 camadas. A camada para baixo é para conteúdo e a camada superior é uma visão de imagem para apagar. Preciso apagar a camada superior quando o usuário tocar e mover o dedo nele.

Não estou entendendo como torná -lo transparente. Alguém pode me ajudar nisso. Se possível, me direcione para qualquer código de exemplo, pois sou muito novo nesse processamento de imagem.

Desde já, obrigado.

Foi útil?

Solução

Você precisa definir o modo PorterDuff em um objeto de tinta:

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

e desenhe com Color.TRANSPARENT

Veja também este tópico no grupo de desenvolvedores do Android:http://groups.google.com/group/android-developers/browse_thread/thread/5b0a4986664b17aa0/de4aab6fb7e97e38?lnk=gst&q=erase+Transparent#

Outras dicas

ImageView tem um método Setalpha que leva um número inteiro entre 0 e 255. Não sei o que é transparente e qual é opaco, mas não deve demorar muito tempo para tentar: P

Funciona, mas não desenhou caminho.

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

    }


}


}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top