【问题标题】:Make certain area of bitmap transparent on touch --> again使触摸时位图的某些区域透明->再次
【发布时间】:2012-05-12 05:29:54
【问题描述】:

我正在尝试实现与每个线程相同的结果: Make certain area of bitmap transparent on touch。 我坚持使用这个答案中提供的代码:Lumis answer 并且根据 SteD,这个解决方案应该可以工作。

不幸的是,它不适用于我(也不适用于其他用户:Make certain area of bitmap transparent on touch doesn't works, it's draw a black circle),我只是得到了黑圈。 我尝试了很多东西,但没有解决这个问题。根据第二个线程的建议使背景透明没有任何区别。

经过多次实验,我发现透明度在我设置时起作用

android:theme="@android:style/Theme.Translucent"

在我的 AndroidManifest.xml 中,我可以看到我的应用程序下的所有内容,即桌面。 我多次查看代码并看不到明显的错误,我认为的唯一原因是因为这是 Z 顺序,但位图和画布不维护 z 顺序。 Z 排序是通过按一定顺序绘制完成的(在此代码中是正确的)。

这是 android 代码优化的一些奇怪示例,还是我在 android manifest 文件中遗漏了一些东西?

【问题讨论】:

    标签: android bitmap android-canvas transparency


    【解决方案1】:

    你可以编辑 onDraw() 方法:

    public void onDraw(Canvas canvas){
            super.onDraw(canvas);
            canvas.drawColor(Color.TRANSPARENT);
            canvas.drawBitmap(bgr, 0, 0, null);
    
            c2.drawCircle(X, Y, 10, pTouch);
            Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/);
            new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP));
            canvas.drawBitmap(overlay, 0, 0, new_paint);
        }
    

    我试过了,效果很好! 希望此解决方案对您有所帮助

    【讨论】:

      【解决方案2】:

      最后我找到了有效的解决方案:

      @Override
      public void onDraw(Canvas canvas){
          super.onDraw(canvas);
      
          //draw background
          canvas.drawBitmap(bgr, 0, 150, 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);
      
          Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/);
          new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP));
          canvas.drawBitmap(overlay, 0, 0, new_paint);
      }
      

      但我不明白为什么工作。我正在使用以下源代码调查 xfermodes:android Xfermodes demo 并根据此图像:Xfermodes image

      这没有任何意义,除了 xfermode 确保覆盖位图是 bean 绘制的第二个(Z 顺序)并且透明度开始发挥作用。但是Z顺序要保持绘制顺序。

      如果有人知道如何解决这个问题,请分享你的知识。

      问候。

      【讨论】:

      • 油漆 new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/); new_paint.setXfermode(新 PorterDuffXfermode(Mode.SRC_ATOP)); canvas.drawBitmap(overlay, 0, 0, new_paint); ==================================================是主要的事情,它解决了谢谢
      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2012-06-08
      • 1970-01-01
      相关资源
      最近更新 更多