Android 如何实现竖排文字显示?
2011-11-08 20:18
471 查看
在android.graphics.Canvas类中有个沿路径画字的方法 void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) Draw the text, with origin at (x,y), using the specified paint, along the specified path. void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint) Draw the text, with origin at (x,y), using the specified paint, along the specified path. Test.java代码://需要在layout中定义Test,且设置背景,在java代码中设置test Text public class Test extends View { private Paint paint; private Path path; private Matrix matrix; private int width = -1; private int height = -1; private float left = 3; private float top = 18; private String title = ""; BitmapDrawable drawable = (BitmapDrawable) getBackground(); public Test(Context context, AttributeSet attrs) { super(context, attrs); paint = new Paint(); paint.setColor(Color.WHITE);//定义字体颜色 paint.setTextSize(14);//定义字体大小 path = new Path(); path.lineTo(0,500);//定义字符路径 matrix = new Matrix(); Log.v("onMeasure", "2"); } @Override protected void onDraw(Canvas canvas) { //画背景 Bitmap b = Bitmap.createBitmap(drawable.getBitmap(),0,0,width,height); canvas.drawBitmap(b, matrix, paint); //画字 showText(canvas, title); } private void showText(Canvas canvas, String text){ float w; final int len = text.length(); float py = 0 + top; for(int i=0; i<len; i ++){ char c = text.charAt(i); w = paint.measureText(text, i, i+1);//获取字符宽度 StringBuffer b = new StringBuffer(); b.append(c); if(py > 81){//定义字的范围 return; } if(isChinese(c)){ py += w; if(py > 81){ return; } canvas.drawText(b.toString(), left, py, paint); //中文处理方法 }else { canvas.drawTextOnPath(b.toString(), path, py, -left-2, paint);//其他文字处理方法 py += w; } } } public void setText(String title){ this.title = title; } public String getText(){ return title; } private boolean isChinese(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { return true; } return false; } //重写View大小方法,使view大小为背景图片大小 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (null != getBackground()) { int h = drawable.getIntrinsicHeight(); int w = drawable.getIntrinsicWidth(); Log.v("onMeasure", "null != getBackground() h:" + h + " w:" + w); width = w; height = h; setMeasuredDimension(w, h); } else { width = widthMeasureSpec; height = heightMeasureSpec; super.measure(widthMeasureSpec, heightMeasureSpec); } } } 在Android中,若要通过程序改变屏幕显示的方向,必须要覆盖setRequestedOrientation()方法,而若要取得目前的屏幕方向,则需要访问getRequestedOrientation()方法。本范例为求简要示范更改做法,设计了一个按钮,当单击按钮的同时,判断当下的屏幕方向,例如竖排(PORTRAIT),则将其更改为横排(LANDSCAPE);若为横排(LANDSCAPE),则将其更改为竖排(PORTRAIT)
相关文章推荐
- Android 如何实现竖排文字显示?
- Android 如何实现竖排文字显示?
- CSS实现文字竖排 DIV CSS文字垂直竖列排版显示如何实现?
- Android之TextView实现文字过长时省略部分或者滚动显示
- 如何用C#显示竖排文字?
- android 文字叠加显示在图片之上控件的实现 -- 充分利用TextView
- 使用CSS如何实现文字竖排
- Android的TextView实现文字高亮显示和显示表情
- android中textview竖排显示,只能说功能实现了
- Android自定义组件,实现图片和文字同时显示
- android 文字叠加显示在图片之上控件的实现 -- 充分利用TextView
- [Unity3D]手机3D游戏开发:如何实现最高分的存储与显示(二)----使用GUI.Box显示文字
- 【转】Android之TextView实现文字过长时省略部分或者滚动显示
- Android中如何实现高亮显示即选中状态
- Android——自由拖动并显示文字的悬浮框实现
- Android UI 如何让TextView中的文字居中显示
- Android自定义TextView实现文字图片居中显示的方法
- Android实现文字一个一个显示出来
- Android示例代码:如何实现一个文字列表
- 如何实现文字加透明背景显示在一张图片的底部的效果