在Android画线必须由一个载体,无论是控制,无论是布局。实际上它们是从继承View。由画线的方式自己的控制或布局的定义是最常见的。

以下是在其定义中的小样本实现RelativeLayout绘制网络格线

代码下载:http://download.csdn.net/detail/yxg190221/7589287

自己定义控件代码:

  1. </pre><pre name="code" class="java">package layout.layout.ex;
  2.  
  3. import android.content.Context;
  4. import android.graphics.Canvas;
  5. import android.graphics.Paint;
  6. import android.util.AttributeSet;
  7. import android.widget.RelativeLayout;
  8.  
  9. public class GridRelativeLayout extends RelativeLayout {
  10. private Canvas myCanvas;
  11. private int horGrid = 100, verGrid = 100;//水平网格和竖直网格
  12. private int screenW, screenH;//屏幕宽和高
  13. private boolean initOver = false;//初始化标签
  14.  
  15. public GridRelativeLayout(Context context) {
  16. super(context);
  17. setWillNotDraw(false);
  18. }
  19.  
  20. public GridRelativeLayout(Context context, AttributeSet attrs) {
  21. super(context, attrs);
  22. setWillNotDraw(false);
  23. }
  24.  
  25. public GridRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
  26. super(context, attrs, defStyle);
  27. setWillNotDraw(false);
  28. }
  29.  
  30. @Override
  31. protected void onDraw(Canvas canvas) {
  32. super.onDraw(canvas);
  33. this.myCanvas = canvas;
  34. Paint paint = new Paint();
  35. paint.setColor(android.graphics.Color.YELLOW);//颜色
  36. paint.setStrokeWidth(3);//线宽
  37. int verNum = (int)(screenH / verGrid) + 1;
  38. int horNum = (int)(screenW / horGrid) + 1;
  39. if (initOver) {
  40. for (int i = 0; i < verNum; i++) {
  41. canvas.drawLine(0, i * verGrid - 1, screenW, i * verGrid - 1,
  42. paint);
  43. }
  44. for (int i = 0; i < horNum; i++) {
  45. canvas.drawLine(i * horGrid - 1, 0, i * horGrid - 1, screenH,
  46. paint);
  47. }
  48. }
  49. }
  50.  
  51. /**设置网格线參数**/
  52. public void setInf(int vergrid, int horgrid, int screenW, int screenH) {
  53. this.verGrid = vergrid;
  54. this.horGrid = horgrid;
  55. this.screenW = screenW;
  56. this.screenH = screenH;
  57. initOver = true;
  58. postInvalidate();
  59. }
  60.  
  61. /**擦除网格线**/
  62. public void clearLine()
  63. {
  64. initOver = false;
  65. postInvalidate();
  66. }
  67. }

主程序代码:

  1. package com.example.test005;
  2.  
  3. import layout.layout.ex.GridRelativeLayout;
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.view.Menu;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10.  
  11. public class MainActivity extends Activity {
  12. private GridRelativeLayout rl;
  13. private Button btnDraw,btnClear;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18. rl=(GridRelativeLayout)findViewById(R.id.rl);
  19. btnDraw=(Button)findViewById(R.id.button1);
  20. btnClear=(Button)findViewById(R.id.button2);
  21. btnDraw.setOnClickListener(new OnClickListener() {
  22.  
  23. @Override
  24. public void onClick(View arg0) {
  25. rl.setInf(100, 100, 1280, 720);//画网格线
  26. }
  27. });
  28. btnClear.setOnClickListener(new OnClickListener() {
  29.  
  30. @Override
  31. public void onClick(View arg0) {
  32. rl.clearLine();//擦除网格线
  33. }
  34. });
  35.  
  36. }
  37.  
  38. @Override
  39. public boolean onCreateOptionsMenu(Menu menu) {
  40. getMenuInflater().inflate(R.menu.main, menu);
  41. return true;
  42. }
  43.  
  44. }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

定义自己的布局RelativeLayout 绘制网格线的更多相关文章

  1. Android相对布局(RelativeLayout)

    Android相对布局(RelativeLayout) 备注:这里的视图和元素是等同的概念. RelativeLayout是一个允许子视图相对于其他兄弟视图或是父视图显示的视图组(通过ID指定).每个 ...

  2. Android 自学之相对布局 RelativeLayout

    相对布局(RelativeLayout),相对布局容器内子组件的位置总是相对兄弟组件.父容器来决定的. RelativeLayout的XML属性及相关方法说明 XML属性 相关方法 说明 androi ...

  3. Android开发之布局--RelativeLayout布局

    RelativeLayout 相对布局 true或false属性 Layout_centerHorizontal   当控件位于父控件的横向中间位置 Layout_centerVertical   当 ...

  4. Xamarin.Forms的相对布局RelativeLayout

    Xamarin.Forms的相对布局RelativeLayout   相对布局RelativeLayout是App中常用的布局方式.它是以界面中的某个元素为基准,设置另外一个元素的位置和大小.通过这种 ...

  5. .Net程序猿玩转Android开发---(7)相对布局RelativeLayout

                 相对布局RelativeLayout是Android布局中一个比較经常使用的控件,使用该控件能够布局出适合各种屏幕分辨率的布局,RelativeLayout採用相对位置进行 ...

  6. [js] 渲染树构建、布局及绘制

    渲染树构建.布局及绘制

  7. Android面试收集录12 View测量、布局及绘制原理

    一.View绘制的流程框架 View的绘制是从上往下一层层迭代下来的.DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下, ...

  8. Android学习笔记(14):相对布局RelativeLayout

    相对布局RelativeLayout,继承自ViewGroup.相对布局的子组件的位置总是相对于兄弟组件或者父容器决定的. RelativeLayout支持的XML属性: android:gravit ...

  9. android:布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!

    1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...

随机推荐

  1. linux系统挂掉问题的分析

    玩linux系统,经常遇到的一件事就是做了某个操作之后系统会突然挂掉,这要怎么办? 1. 首先我们要看log,看看是否会留下一些蛛丝马迹,比如PC/LR是否有留下来. PC是ARM的一个寄存器,即程序 ...

  2. 在SharePoint 2013 中使用文档库Scheduling (计划公布功能)

    本文讲述在SharePoint2013 中使用文档库Scheduling (计划公布功能)的步骤和注意的事项. 文档库Scheduling (计划公布功能) 用于设定当文档通过审批后特定的时间区间内才 ...

  3. Javascript 生成指定范围数值随机数

    JavaScript对随机数的介绍比较少,所以今天分享一下有关随机数的一些事儿.希望能对大家有点小帮助. 主要的公式就是parseInt(Math.random()*(上限-下限+1)+下限); Ma ...

  4. Swift - 使用MapKit显示地图,并在地图上做标记

    通过使用MapKit可以将地图嵌入到视图中,MapKit框架除了可以显示地图,还支持在地图上做标记. 1,通过mapType属性,可以设置地图的显示类型 MKMapType.Standard :标准地 ...

  5. CheckBox in ListView

    CheckBox in ListView Listview 在android中是经常用的组件,一些特殊情况下,系统提供的list view item 不够用, 不能满足需求,那么就需要自定义listV ...

  6. ASP.NET中IsPostBack详解(转载)

    1.IsPostBack介绍Page.IsPostBack是一个标志:当前请求是否第一次打开. 调用方法为:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者 ...

  7. sql: PL/SQL proc

    A PL/SQL block has the following structure: [DECLARE declaration_statements ] BEGIN executable_state ...

  8. oracle如何设置show parameter显示隐含参数

    在sqlplus中shwo parameter是显示不了隐藏参数的,需要做一个处理,如下所示:    以SYS用户登录: C:\Documents and Settings\guogang>sq ...

  9. error -27257: Pending web_reg_save_param/reg_find/create_html_param[_ex] request(s) detected and reset at the end of iteration number 1

    检查点函数  web_reg_find("Search=body",     "savecount=num",     "Text=test1&quo ...

  10. C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)

    各种继承方式: 特征 公有继承 保护继承 私有继承 公有成员变为 派生类的公有成员 派生类的保护成员 派生类的私有成员 保护成员变为 派生类的保护成员 派生类的保护成员 派生类的私有成员 私有成员变为 ...