搞定了,原来TextView在onPaint中已经将canvas的坐标按照scrollX进行了偏移,原来的0点坐标必须加上getScrollX才能起作用,更正代码:
解决方案 »
- android i2c电容屏驱动问题
- Android平台下Media Recorder和Media Player同时工作的问题,高分求教,急~~~~~
- 如何取出2个#号的参数呢
- 做一个android的K歌软件
- 一个Android安装问题
- 一个http的Post请求问题,unable to resolve host <我的域名>:no address associated with hostnam
- 找不到主机程序抓取webservice的手机归属地服务
- Android 自定义通讯录取代系统通讯录?
- 3G网络下的socket通信
- 新手提问 一般什么时候需要定义一个新类?
- 来深圳一个月了,投简历投的 求android开发实习
- [菜鸟求指导]怎样把dataIputStream直接赋给dataOutputStream呢
if(mDrawableLeft == null)
return;
canvas.save();
int comPad = getCompoundDrawablePadding();
int w = getWidth();
int h = getHeight(); int pl = getPaddingLeft();
int pt = getPaddingTop();
int pr = getPaddingRight();
int pb = getPaddingBottom();
Layout layout = getLayout(); //compute left drawable size to fit this view
int imgW = mDrawableLeft.getIntrinsicWidth();
int imgH = mDrawableLeft.getIntrinsicHeight(); int validH = h - pt - pb;
FontMetrics fm = getPaint().getFontMetrics();
validH = (int)((fm.descent - fm.ascent) * 0.85);
if(imgH > validH)
{
float scale = validH * 1.0f / imgH;
imgH = validH;
imgW = (int)(imgW * scale);
} //draw left icon
String text = getText().toString();
int left = 0;
int top = ((h - imgH) >> 1);
int scrollX = getScrollX(); if(text != null && text.length() != 0)
{
//when this edit has text in it
left = (int)(w - layout.getLineWidth(0)) / 2 - imgW;
left -= comPad;
}
else
{
//compute icon left of hit text
CharSequence chs = getHint();
if(chs != null)
text = chs.toString(); int textWidth = 0; if(text != null && text.length() != 0)
{
TextPaint paint = getPaint();
textWidth = (int)layout.getDesiredWidth(text, paint);
} int gravity = getGravity() & Gravity.HORIZONTAL_GRAVITY_MASK;
if(gravity == Gravity.LEFT)
{
left = pl + textWidth + comPad;
}
else if(gravity == Gravity.CENTER_HORIZONTAL)
{
left = ((w - textWidth) >> 1) + pl - imgW - comPad;
}
else
left = w - textWidth - pr - imgW - comPad;
}
if(left >= pl && ((left + imgW) < (w - pr)))
{
mDrawableLeft.setBounds(left + scrollX, top, left + scrollX + imgW, top + imgH);
mDrawableLeft.draw(canvas);
}
canvas.restore();
}