【问题标题】:Create Transparet Circle using PorterduffXfermode使用 PorterduffXfermode 创建透明圆
【发布时间】:2014-03-02 21:13:41
【问题描述】:

我正在尝试创建一个显示两个图像“bitmap_1,bitmap_2”的应用程序,当用户单击屏幕(显示的图像“bitmap_2”)时,会出现一个透明圆圈,显示来自下方的圆圈部分位图_1。

我花了很多时间寻找解决方案,我得到了一些代码,在三星 S 9001 "S1" 上运行良好,但在其他设备上显示黑色圆圈

            public TouchView(Context context) {
        super(context);
        setScreenWH();

        setBmImages(imagePosition);

        // overlayDefault =
        // BitmapFactory.decodeResource(getResources(),R.drawable.pre1);
        // overlay =
        // BitmapFactory.decodeResource(getResources(),R.drawable.pre1).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(18, Blur.NORMAL));

    }

...

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

    }

请帮我解决这个问题,参考这段代码: PorterduffXfermode: Clear a section of a bitmapAndroid canvas: draw transparent circle on imageMake certain area of bitmap transparent on touch

【问题讨论】:

    标签: android image android-canvas


    【解决方案1】:

    @Elias Sh.

    我已经解决了。

    试试这个

         @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);    
    
                c2.drawCircle(X, Y, 80, pTouch);
    
    
        // draw the overlay over the background
        // code for png's with transparency
        /* canvas.drawBitmap(overlay, 0, 0, null); */
    
        // below code to be used only if images are NOT png's with transparency
        Paint ptouch2 = new Paint(Paint.ANTI_ALIAS_FLAG);
                ptouch2.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP));
                canvas.drawBitmap(overlay, 0, 0, ptouch2);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 2016-06-17
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多