[转帖]Android软件开发之盘点自定义View界面大合集(一)_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2941 | 回复: 0   主题: [转帖]Android软件开发之盘点自定义View界面大合集(一)        下一篇 
wei.wang
注册用户
等级:少校
经验:1001
发帖:87
精华:0
注册:2013-8-29
状态:离线
发送短消息息给wei.wang 加好友    发送短消息息给wei.wang 发消息
发表于: IP:您无权察看 2013-9-9 9:41:36 | [全部帖] [楼主帖] 楼主

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

北京联动北方科技有限公司

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

北京联动北方科技有限公司

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

复制代码


2.绘制无规则几何图形

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

北京联动北方科技有限公司

  1. package cn.m15.xys;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Paint;
  7. import android.graphics.Path;
  8. import android.graphics.RectF;
  9. import android.os.Bundle;
  10. import android.view.View;
  11. public class Geometry extends Activity {
  12.        public int mScreenWidth = 0;
  13.        public int mScreenHeight = 0;
  14.       
  15.        @Override
  16.        protected void onCreate(Bundle savedInstanceState) {
  17.              setContentView(new GeometryView(this));
  18.              super.onCreate(savedInstanceState);
  19.             
  20.        }
  21.       
  22.        class GeometryView extends View {
  23.              Paint mPaint = null;
  24.             
  25.              public GeometryView(Context context) {
  26.                    super(context);
  27.                    mPaint = new Paint();
  28.                    mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
  29.              }
  30.             
  31.              @Override
  32.              protected void onDraw(Canvas canvas) {
  33.                    super.onDraw(canvas);
  34.                    
  35.                    //设置画布颜色 也就是背景颜色
  36.                    canvas.drawColor(Color.WHITE);
  37.                    
  38.                    mPaint.setColor(Color.BLACK);
  39.                    canvas.drawText("绘制无规则几何图形喔!!!", 150, 30, mPaint);
  40.                    
  41.                    //绘制一条线
  42.                    mPaint.setColor(Color.BLACK);
  43.                    mPaint.setStrokeWidth(4);
  44.                    canvas.drawLine(0, 0, 100, 100, mPaint);
  45.                    
  46.                    //绘制一个矩形
  47.                    mPaint.setColor(Color.YELLOW);
  48.                    canvas.drawRect(0, 120, 100, 200, mPaint);
  49.                    
  50.                    //绘制一个圆形
  51.                    mPaint.setColor(Color.BLUE);
  52.                    canvas.drawCircle(80, 300, 50, mPaint);
  53.                    
  54.                    //绘制一个椭圆
  55.                    mPaint.setColor(Color.CYAN);
  56.                    canvas.drawOval(new RectF(300,370,120,100), mPaint);
  57.                    
  58.                    //绘制多边形
  59.                    mPaint.setColor(Color.BLACK);
  60.                    Path path = new Path();
  61.                    path.moveTo(150+5 , 400 -50);
  62.                    path.lineTo(150+45, 400 - 50);
  63.                    path.lineTo(150+30, 460 - 50);
  64.                    path.lineTo(150+20, 460 - 50);
  65.                    path.close();
  66.                    canvas.drawPath(path, mPaint);
  67.                    
  68.              }
  69.        }
  70. }




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论