- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个可以水平滚动的 View (通过 ViewGroup)。在左侧,我有行的图像(一种标题)。当我向左 ScrollView 时,我的项目移动到行的标题下。因为我的标题背景是透明的,所以我看到了这个标题下的项目。我想删除标题下的部分项目。在绘制标题之前,我尝试在 drawChild 方法中通过 Paint with PorterDuff.Mode.CLEAR 绘制矩形。结果我的标题下有黑色矩形。我发现了一些相同的问题,但在其他情况下:
https://code.google.com/p/android/issues/detail?id=54105#c1
Android Paint PorterDuff.Mode.CLEAR drawing black color on my view
但是我没有找到解决这个问题的办法。据我所知,在使用 PorterDuff.Mode.CLEAR 之前必须绘制一些其他位图。就我而言,我不能这样做。我可以删除(在我的例子中是透明的)一些在我看来的矩形吗?
编辑:
@Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
if(isTitle(child)){
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
Rect rect=new Rect(child.getLeft(),child.getTop(),child.getRight(),child.getBottom());
canvas.drawRect(rect,paint);
}
return super.drawChild(canvas, child, drawingTime);
}
我也在某处看到过这种方法,但它根本没有改变我的布局:
@Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
if(isTitle(child)){
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
Bitmap b = Bitmap.createBitmap(child.getWidth(), child.getHeight(), Bitmap.Config.ARGB_8888);
canvas.drawBitmap(b, child.getLeft(),child.getTop(), paint);
b.recycle();
}
return super.drawChild(canvas, child, drawingTime);
}
编辑 2。试过 saveLayer:
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
RectF rect=new RectF(child.getLeft(),child.getTop(),child.getRight(),child.getBottom());
int a = canvas.saveLayer(rect, paint, Canvas.ALL_SAVE_FLAG);
canvas.drawRect(rect,paint);
canvas.restoreToCount(a);
编辑 3
我有一个可以向左、向右、向上和向下滚动的 View 。此 View 在顶部和左侧包含 2 种类型的标题,我有可以不同大小的项目。当我添加所有这些项目以查看时,我先添加项目,然后再添加标题,在这种情况下,标题将始终绘制在项目前面。当用户向左/顶部滚动时,项目将转到左侧/顶部,但标题将保留在其位置并且该项目将位于标题下方。当我有标题背景时,没问题,因为用户看不到标题下的项目,但现在我没有背景,用户看到标题下的项目。这就是为什么我尝试使用 drawChild(调用每个项目)来删除标题下的部分项目。但是如果我使用
canvas.saveLayer(null, null, Canvas.ALL_SAVE_FLAG);
draw_whatever_you_want(canvas);
canvas.drawRect(rect, clearPaint);
canvas.restore();
我必须将它用于所有项目。我在 drawChild 中的代码
@Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
if(!isTitle(child)){
int left = child.getLeft();
int top = child.getTop();
int width = getLeftHeaderWidth();
int height = getTopHeaderHeight();
if(left < width) {
RectF rect = new RectF(0, 0, width, getHeight());
canvas.saveLayer(null, null, Canvas.ALL_SAVE_FLAG);
boolean result = super.drawChild(canvas, child, drawingTime);
canvas.drawRect(rect, mClearPaint);
canvas.restore();
return result;
} else if(top < height) {
RectF rect = new RectF(0, 0, getWidth(), height);
canvas.saveLayer(null, null, Canvas.ALL_SAVE_FLAG);
boolean result = super.drawChild(canvas, child, drawingTime);
canvas.drawRect(rect, mClearPaint);
canvas.restore();
return result;
} else{
return super.drawChild(canvas, child, drawingTime);
}
}else {
return super.drawChild(canvas, child, drawingTime);
}
}
最佳答案
我认为您在 @Override protected boolean drawChild
中尝试的不是最好的方法,我只会执行以下操作:
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.save(); // it saves the current clip, if not use CLIP_SAVE_FLAG
canvas.clipRect(childrenRect)
super.dispatchDraw(canvas); // draw your clipped children
canvas.restore(); // now no clip
draw_your_headers(canvas);
}
关于android - ViewGroup 中的黑色矩形 PorterDuff.Mode.CLEAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32442832/
谁能告诉我为什么 的技术原因在 app.config 与 中无效 通常这样使用: 问题是我正在使用安装程序产品 (InstallShield) 将 xml 转换为 app.config
在Linux上,使用崇高的文本。Os.system(‘Clear’)应该只清除控制台窗口。用于Windows的os.system(‘cls’)。但它回来的时候和我不一样。。代码:。退货:。为什么在Cl
这个问题在这里已经有了答案: How can I force the STL memory cache to clear? (2 个答案) 关闭 6 年前。 我在 Solaris 10 上使用 g+
official docs关于 .clear() 我不是很清楚。他们说: Erases all AsyncStorage for all clients, libraries, etc. You pr
我有这段代码可以清除 C# WebBrowser 控件中的缓存。它的问题是它还会清除 cookie。在整个互联网上,我似乎是唯一一个不想这样的人。 我需要维护 cookie,但要丢弃缓存。 特别感兴趣
我记得直接在 DataTable 上调用的一些方法/属性之间存在差异。类,以及 DataTable.Rows 上同名的方法/属性属性(property)。 (可能是我读到这篇文章的 RowCount/
在 Unity 的 Camera组件中有一个属性清除标志,它允许从四个选项中进行选择:天空盒、纯色、仅深度和不清除。 正如文档所说: Don’t clear This mode does not cl
我无法找出为什么我的函数没有被调用。我将 alert("test") 放在那里只是为了测试函数是否被调用,而事实并非如此。 HTML: JS: function clear(price,quanti
我有 2 个数组列表: ArrayList> res= new ArrayList(); ArrayList data= new ArrayList(); 在我将结果集添加到子项并将子项附加到父项后,
正如主题所述..哪个版本更有效,为什么? std::vector a; .. a.clear(); 或 std::vector a; .. if(!a.empty()) a.clear(); 最佳
我包含了定义函数“clear()”的“PDCurses/curses.h”,然后当我使用“std::wstring::clear()”时,msvc-10.0 编译器报告错误。当我在包含后使用“#und
Session.Clear() 与 Session.Contents.Clear() 有什么区别? 我想清除所有 session 变量。 谢谢。 最佳答案 根据反射器,没有差异。 Session.Co
QPointer有一个方法, clear() . Clears this QPointer object. 我不确定“清晰”的确切含义。在我看来,这可能意味着 它会删除您引用的指针。 或 它取消附加您
在 string::clear 函数的描述中,它说: clear: Erases the contents of the string, which becomes an empty string (
我有两个不同的 Mathematica 笔记本,它们具有相似但功能不同的功能。当它们是唯一打开的笔记本时,两者都可以正常工作。尽管我(自由地)使用 Clear[] 来清除相关变量,但其中一个在另一个笔
有没有办法扩展 Symfony 2 cache:clear命令来清除 APC 还是执行一些其他逻辑? 最佳答案 您可以使用 ApcBundle去做这个。 关于php - 扩展 Symfony 2 缓存
我正在尝试使用 html 和 css 制作一个简单的信息网站,并使用 960 网格,因为该网站将具有分栏结构。 当我将标题 h1 float 到左侧(它有 Logo 图像,我正在使用 css 添加图像
我刚刚意识到: 在一系列 float div 导致布局破坏之后,同时 工作正常。 谁能解释一下? 这是 CSS: div.clear { clear:both; } 最佳答案 如果您将
这两个命令等效吗?如果不是,有什么区别? 最佳答案 rake 任务仅清除存储在文件系统 "#{Rails.root}/tmp/cache" 中的文件。这是该任务的代码。 namespace :cach
在STM32F407上初始化USART1时,我在启用TC中断时遇到了问题。一旦 USART RCC 启用,SR 中的 Tcflags就会被设置(“1”),而在启用 TC 中断之前清除该标志对我来说已经
我是一名优秀的程序员,十分优秀!