【问题标题】:Making Overlaid image transparent on touch in Android?在Android中使覆盖图像在触摸时透明?
【发布时间】:2011-03-02 13:45:53
【问题描述】:

当我在该图像上移动手指时,我需要帮助使位图图像的触摸区域透明(看起来像是擦除)。

我有一个带有 Alpha 通道的 PNG 文件。我想把触摸的像素变成透明的,这样用户就可以感觉到他实际上是在擦除它。

为此,我使用框架布局来加载 2 层。下层用于内容,上层是用于擦除的 Imageview。当用户触摸并在其上移动手指时,我需要擦除上层。

我不知道如何使它透明。谁能帮助我。如果可能,请指导我查看任何示例代码,因为我对这种图像处理非常陌生。

提前致谢。

【问题讨论】:

    标签: android image-processing android-custom-view


    【解决方案1】:

    您需要在 Paint 对象上设置 PorterDuff 模式:

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

    然后用Color.TRANSPARENT画画

    另请参阅 Android 开发者组中的此线程: http://groups.google.com/group/android-developers/browse_thread/thread/5b0a498664b17aa0/de4aab6fb7e97e38?lnk=gst&q=erase+transparent#

    【讨论】:

      【解决方案2】:

      ImageView 有一个 setAlpha 方法,它采用 0 到 255 之间的整数。我不知道哪个是透明的,哪个是不透明的,但应该不会花很长时间来尝试:P

      【讨论】:

      • 您好,感谢您的回复。 setAlpha() 将使整个图像透明。我想要一种行为,比如用户在图像上触摸或移动手指时,该部分应该变成透明的。
      【解决方案3】:

      它可以工作,但没有绘制路径。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        相关资源
        最近更新 更多