2010-06-11 6 views
4

J'ai besoin d'aide pour rendre transparentes les zones touchées de l'image bitmap (cela semble être un effacement) pendant que je déplace mon doigt sur cette image. J'ai un fichier PNG avec un canal Alpha dans celui-ci. Je veux transformer les pixels touchés en transparent pour que l'utilisateur puisse sentir qu'il l'efface réellement. Pour cela, j'utilise la disposition de trame pour charger 2 couches. La couche inférieure est pour le contenu et la couche supérieure est une Imageview pour l'effacement. J'ai besoin d'effacer la couche supérieure lorsque l'utilisateur touche et déplace son doigt dessus.Faire une image superposée transparente sur Android?

Je ne comprends pas comment le rendre transparent. Quelqu'un peut-il m'aider s'il vous plaît dans ceci. Si possible, veuillez me diriger vers un exemple de code, car je suis très nouveau dans ce traitement d'image.

Merci d'avance.

Répondre

11

Vous devez régler le mode PORTERDUFF sur un objet de la peinture:

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

et dessiner avec Color.TRANSPARENT

voir aussi ce fil dans le groupe de développeur applications: http://groups.google.com/group/android-developers/browse_thread/thread/5b0a498664b17aa0/de4aab6fb7e97e38?lnk=gst&q=erase+transparent#

+0

Brilliant .. si simple :) –

+0

Voir une solution résolue ... avec un exemple de démonstration http://whats-online.info/science-and-tutorials/137/Android-tutorial-How-to-erase-part- of-bitmap-image-on-touch / –

0

ImageView a une méthode setAlpha qui prend un nombre entier compris entre 0 et 255. Je ne sais pas qui est transparent et qui est opaque, mais il ne devrait pas prendre beaucoup de temps à essayer: P

+3

Salut, merci pour la réponse. setAlpha() rendra toute l'image transparente. Je veux un comportement comme, où l'utilisateur touche ou déplace son doigt sur l'image, cette partie devrait devenir transparente. – Andhravaala

0

Cela fonctionne mais n'a pas tracé le chemin.

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

    } 


} 


} 
Questions connexes