10

我创建了一个 custom EditText,并onDraw()覆盖了它的功能。一切正常(我可以在 EditText 中绘制任何内容),直到我想为此更改输入法EditText并调用此函数:

setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

无论我何时何地调用它:在它被调用后,我的自定义EditText消失了,并且只显示原始EditText的,尽管我的重写onDraw()函数,并且在其中,它的超级函数被调用(无论我在哪里调用它) .

我也尝试过按照这里的一些帖子中的建议使用透明颜色: setBackgroundColor(Color.TRANSPARENT)在基类上,以及 函数中paint.setColor(0x80FF0000)Paint对象,onDraw()但它们没有效果。

编辑:我发现问题不在于设置输入类型,而在于EditText同时设置输入类型和重力:

setGravity(Gravity.CENTER_HORIZONTAL);

如果其中任何一个未设置,我的自定义视图将按预期绘制。另外(更奇怪的是): withGravity.CENTER_VERTICAL没有问题,只有Gravity.CENTER_HORIZONTALand Gravity.CENTER

这两个设置似乎是互斥的。这可能吗?

4

4 回答 4

5

检查你的getScrollX()价值观。我打赌你会看到像 1000000 像素这样的值。EditText 以这种奇怪的方式翻译它的画布,所以即使你真的在上面画画,它也远离可见的剪辑。

要解决它,只需将 scrollX 值添加到您的绘图坐标中。

于 2015-05-20T12:50:48.327 回答
2

感谢@simekadam 的回答,我终于设法修复它。这就是我修复它的方式,以防你没有得到它

override fun onDraw(canvas: Canvas) {        
    super.onDraw(canvas)
    canvas.translate(scrollX.toFloat(), 0f)
    // do your drawing
}
于 2018-03-18T10:53:40.593 回答
0

您必须在 xml 中设置 android:digits="0123456789"。但我不知道为什么...

于 2015-04-18T03:32:33.840 回答
0

getScrollX() 解决了我的问题

   @Override
    protected void onDraw(Canvas canvas) {
        Paint p = new Paint();
        p.setColor(Color.RED);
        canvas.drawLine(0f+getScrollX(), 20f, 200f+getScrollX(), 30f, p);       
    }
于 2018-11-13T08:28:15.963 回答