【问题标题】:onDraw() on View draws behind the layoutonDraw() on View 在布局后面绘制
【发布时间】:2014-03-17 20:18:19
【问题描述】:

好的,这就是交易。我想在我的扩展图库类中移动项目以更改图像的顺序。我现在的做法:

  • 长按删除当前选中的项目,
  • 使用onDraw() 绘制相同的图像,以便我可以使用onTouchEvent() 移动它
  • 在发布时再次添加项目

这很好用,但问题是当使用onDraw() 方法时,它会在画廊项目后面绘制图像。有没有办法改变绘制的优先级?

【问题讨论】:

  • 你是在实际绘制图像后调用 super.onDraw() 吗?
  • 画廊中的图像是画廊绘制的,所以我无法控制它。我只想从扩展的画廊类中绘制这些图像

标签: android gallery ondraw


【解决方案1】:

好吧,我在走向完全不同的方向后发现了这一点 =/

以下是针对有相同问题的人的解决方案:

在构造函数(或初始化组件的任何其他位置)中设置setWillNotDraw(false) 并覆盖dispatchDraw()dispatchDraw() 绘制 ViewGroup 子级,因此您可以自行决定是否要在其他视图的后面或顶部绘制。

示例取自Custom drawing on top of Gallery view (and it's child views)

@Override
protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);

    // do your drawing stuff here
    canvas.drawPath(mPath,mPaint);
}

【讨论】:

  • +1 因为很难通过搜索找到此信息。使用这种方法成功地在 GridView 上绘制了 onScreen 帮助。小错误:应该调用 setWillNotDraw(false); willNotDraw() 是相同参数的 getter。注意:setWillNotDraw(false) 禁用了假设 ViewGroup 完全依赖其子视图来绘制自身的优化。
  • 请分享更多代码示例。看代码真的很容易理解。 +1 两个
  • 尼克你还记得这个吗?您是否在画廊的图像或自定义视图中覆盖 dispatchDraw()?还是您在一个视图中做所有事情?任何帮助表示赞赏
  • 哈这是很久以前的事了。我想我只是在自定义画廊中获取孩子,抓住它的位图,隐藏孩子并在 dispatchDraw() 中绘制位图
  • 这是一种特别有用的技术,用于在自定义视图上绘制可选的选择指示符(可能是圆角笔划矩形)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
相关资源
最近更新 更多