【问题标题】:Draw image inside a View without subclassing在视图中绘制图像而不进行子类化
【发布时间】:2015-03-13 22:22:53
【问题描述】:

我可以在没有子类化的情况下在视图中绘制图像吗?我试过了:

TextView texto = (TextView) viewGroup.findViewWithTag("text");
Paint p = new Paint();
p.setColor(Color.WHITE);
Bitmap b = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_lanc);
Bitmap b2 = b.copy(Bitmap.Config.ARGB_8888, true);
Canvas c = new Canvas(b2);
c.drawBitmap(b, 1, 1, p);
textView.draw(c);

有人可以帮助我吗?

【问题讨论】:

    标签: android canvas bitmap android-canvas android-bitmap


    【解决方案1】:

    您不能直接这样做——在视图上调用draw(Canvas) 将导致该视图 在画布中执行其绘图命令。因此,在您的情况下,这会将 TextView 绘制到您提供的 Canvas 上(而不是相反)。

    如果你需要这样做,你可以在视图上设置一个可绘制的子类,它自己进行自定义绘图,然后 那个 将在视图的画布中绘制,但无论你想做什么在这里做,可能有更简单的方法。在不了解您的要求的情况下,这是不可能的。

    【讨论】:

    • 我正在尝试将一个图标放在已经在 gridview 中的 textview 中,当适配器调用 getview 时,我将根据数据库字段状态值进行绘制。
    • 为什么不直接使用包含 TextView 和 ImageView 的 FrameLayout?
    • 还有,你为什么不能子类化?
    • 如果我可以扩展一个类,我对这段代码的维护会更低,并且更容易重用代码
    • 我想这很公平。我会使用带有 ImageView 和 TextView 作为子项的 FrameLayout,然后在您的适配器中对其进行膨胀——根据数据库值分配图像。
    【解决方案2】:

    绘图不是这样工作的。 textview的draw()方法会被android调用,系统提供一个canvas实例。当您使用自己创建的画布调用它时,textview 将在您的画布实例上自行绘制,但这与屏幕上显示的内容无关。

    【讨论】:

    • 但是有办法不用子类化吗?
    猜你喜欢
    • 2012-06-03
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多