根据要求,在onDraw()中使用画布设计的文本支持所有屏幕
the designed text using canvas in onDraw() as per reqirement to support all screens
我设计了一个侧边栏,它垂直包含26个字符。
当我使用HVGA屏幕(模拟器)时,它适合屏幕,但不适合其他屏幕。我使用onDraw()
方法中的画布设计了那个侧边栏。
如何将此侧边栏适用于所有类型的屏幕?
private void init() {
float GESTURE_THRESHOLD_DP = 13.9f;
// Get the screen's density scale
float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);
// Use mGestureThreshold as a distance in pixels...
l = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
setBackgroundColor(0x44FFFFFF);
}
public SideBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public void setListView(ListView _list) {
list = _list;
sectionIndexter = (SectionIndexer) _list.getAdapter();
}
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
int i = (int) event.getY();
System.out.println("i is:"+i);
int idx = i / m_nItemHeight;
if (idx >= l.length) {
idx = l.length - 1;
} else if (idx < 0) {
idx = 0;
}
if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
if (sectionIndexter == null) {
sectionIndexter = (SectionIndexer) list.getAdapter();
}
int position = sectionIndexter.getPositionForSection(l[idx]);
if (position == -1) {
return true;
}
list.setSelection(position);
}
return true;
}
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
float f;
paint.setColor(Color.BLACK);
paint.setTextSize(18);
float scale = (float) getWidth();
System.out.println(""+Paint.FAKE_BOLD_TEXT_FLAG);
paint.setTextAlign(Paint.Align.CENTER);
paint.setAntiAlias(true);
float widthCenter = getMeasuredWidth() /2;
for (int i = 0; i < l.length; i++) {
canvas.drawText(String.valueOf(l[i]), widthCenter, m_nItemHeight + (i * m_nItemHeight), paint);
}
super.onDraw(canvas);
}
}
发布onDraw()
会有所帮助。无论如何,您必须使用getHeight() / 26
作为参考来适应所有屏幕。你似乎是在不断地衡量问题。
相关文章:
- 将文本区域行/列转换为屏幕 x/y 坐标
- HTML/JS 如何输入文本并使其显示在屏幕上
- 尝试根据屏幕大小预先设置文本
- 使用Html2Canvas的文本区域屏幕截图
- 如何在Windows 7/8中通过单击文本输入来显示屏幕键盘
- 将文本框中的文本打印到屏幕上
- 当屏幕大小为中或小或xs时,文本溢出,会弄乱整个表.不过,它在全屏模式下运行良好
- 如何在CSS中将文本相互对齐并使图像宽度为屏幕
- 如何将变量设置为文本输入,然后使其显示在屏幕上
- 如何在 Javascript 中的 if 语句的弹出屏幕中显示文本
- Javascript 图像滑块将文本发送到屏幕外并显示页脚
- 如果屏幕缩小,请更改
的文本
- 根据屏幕大小调整文本大小
- JS:如何将文本框中的值打印到屏幕上
- 文本不会在屏幕大小调整时调整大小
- 在javascript提示下输入文本后,文本不会显示在屏幕上
- 如何获取文本光标在屏幕上的像素位置
- 如何在文本框出现在屏幕上时设置焦点
- 根据要求,在onDraw()中使用画布设计的文本支持所有屏幕
- 在firefox操作系统中,根据屏幕方向调整文本区域的大小