Android软件开发之盘点自定义View界面大合集(二)

分享到:

Android软件开发之盘点自定义View界面大合集(二) - 雨松MOMO的程序世界 - 51CTO技术博客

雨松MOMO带大家盘点Android 中的自定义View界面的绘制

今天我用自己写的一个Demo 和大家详细介绍一个Android中自定义View中的使用与绘制技巧。

 

1.自定义view绘制字符串

相信在实际开发过程中必然很多地方都须要用到系统字 为什么会用到系统字? 方便 省内存 我相信做过J2ME游戏开发的朋友应该深知内存有多么多么重要 而且使用它还可以带来一个更重要的好处就是很方便的可以实现多国语言的切换 笔者现在在正在做的一个产品就是可以多语言切换的软件 有英语 繁体中文 等等 设想如果使用图片字的话那每个语言都须要出一套图,我用一个例子简单介绍一下绘制字符串。 

 

  1. package cn.m15.xys;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.graphics.Canvas;  
  6. import android.graphics.Color;  
  7. import android.graphics.Paint;  
  8. import android.graphics.Paint.FontMetrics;  
  9. import android.os.Bundle;  
  10. import android.view.Display;  
  11. import android.view.View;  
  12.  
  13. public class Font extends Activity {  
  14.     public int mScreenWidth = 0;  
  15.     public int mScreenHeight = 0;  
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.     setContentView(new FontView(this));  
  19.     // 获取屏幕宽高  
  20.     Display display = getWindowManager().getDefaultDisplay();  
  21.     mScreenWidth  = display.getWidth();  
  22.     mScreenHeight = display.getHeight();  
  23.     super.onCreate(savedInstanceState);  
  24.  
  25.     }  
  26.  
  27.     class FontView extends View {  
  28.         public final static String STR_WIDTH = "获取字符串宽为:";   
  29.         public final static String STR_HEIGHT = "获取字体高度为:";   
  30.         Paint mPaint = null;  
  31.           
  32.     public FontView(Context context) {  
  33.         super(context);  
  34.         mPaint = new Paint();  
  35.     }  
  36.  
  37.     @Override  
  38.     protected void onDraw(Canvas canvas) {  
  39.         //设置字符串颜色  
  40.         mPaint.setColor(Color.WHITE);  
  41.         canvas.drawText("当前屏幕宽" + mScreenWidth, 0, 30, mPaint);  
  42.         canvas.drawText("当前屏幕高"+ mScreenHeight, 0, 60, mPaint);  
  43.         //设置字体大小  
  44.         mPaint.setColor(Color.RED);  
  45.         mPaint.setTextSize(18);  
  46.         canvas.drawText("字体大小为18", 0, 90, mPaint);  
  47.         //消除字体锯齿  
  48.         mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);  
  49.         canvas.drawText("消除字体锯齿后", 0, 120, mPaint);  
  50.         //获取字符串宽度  
  51.         canvas.drawText(STR_WIDTH + getStringWidth(STR_WIDTH), 0, 150, mPaint);  
  52.         //获取字体高度  
  53.         canvas.drawText(STR_HEIGHT + getFontHeight(), 0, 180, mPaint);  
  54.         //从string.xml读取字符串绘制  
  55.         mPaint.setColor(Color.YELLOW);  
  56.         canvas.drawText(getResources().getString(R.string.string_font), 0, 210, mPaint);  
  57.         super.onDraw(canvas);  
  58.     }  
  59.       
  60.     /**  
  61.      * 获取字符串宽  
  62.      * @param str  
  63.      * @return  
  64.      */  
  65.     private int getStringWidth(String str) {  
  66.         return (int) mPaint.measureText(STR_WIDTH);   
  67.     }  
  68.     /*  
  69.      * 获取字体高度  
  70.      */  
  71.     private int getFontHeight() {  
  72.         FontMetrics fm = mPaint.getFontMetrics();  
  73.         return (int)Math.ceil(fm.descent - fm.top) + 2;  
  74.     }  
  75.     }  

2.绘制无规则几何图形

绘制无规则几何图形似乎在实际工作中很少可以用到 原因是用程序去绘制图形即使在精准再好看也不会有美术出的图片好看 但是使用程序绘制图形作为学习来说却是基础中的基础,所以建议大家都看一看。

昵    称:
验证码:

相关文档: