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

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

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

自己定义控件代码:

</pre><pre name="code" class="java">package layout.layout.ex;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.RelativeLayout; public class GridRelativeLayout extends RelativeLayout {
private Canvas myCanvas;
private int horGrid = 100, verGrid = 100;//水平网格和竖直网格
private int screenW, screenH;//屏幕宽和高
private boolean initOver = false;//初始化标签 public GridRelativeLayout(Context context) {
super(context);
setWillNotDraw(false);
} public GridRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
setWillNotDraw(false);
} public GridRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setWillNotDraw(false);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.myCanvas = canvas;
Paint paint = new Paint();
paint.setColor(android.graphics.Color.YELLOW);//颜色
paint.setStrokeWidth(3);//线宽
int verNum = (int)(screenH / verGrid) + 1;
int horNum = (int)(screenW / horGrid) + 1;
if (initOver) {
for (int i = 0; i < verNum; i++) {
canvas.drawLine(0, i * verGrid - 1, screenW, i * verGrid - 1,
paint);
}
for (int i = 0; i < horNum; i++) {
canvas.drawLine(i * horGrid - 1, 0, i * horGrid - 1, screenH,
paint);
}
}
} /**设置网格线參数**/
public void setInf(int vergrid, int horgrid, int screenW, int screenH) {
this.verGrid = vergrid;
this.horGrid = horgrid;
this.screenW = screenW;
this.screenH = screenH;
initOver = true;
postInvalidate();
} /**擦除网格线**/
public void clearLine()
{
initOver = false;
postInvalidate();
}
}

主程序代码:

package com.example.test005;

import layout.layout.ex.GridRelativeLayout;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity {
private GridRelativeLayout rl;
private Button btnDraw,btnClear;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rl=(GridRelativeLayout)findViewById(R.id.rl);
btnDraw=(Button)findViewById(R.id.button1);
btnClear=(Button)findViewById(R.id.button2);
btnDraw.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
rl.setInf(100, 100, 1280, 720);//画网格线
}
});
btnClear.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
rl.clearLine();//擦除网格线
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

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

定义自己的布局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. js中使用jstl中得到的值

    jstl的标签会转化为服务器端的代码执行,而js代码则在客户端执行.        要在js中使用jstl并不是直接将jstl的value赋值给一个js的变量,而是要在jstl的value上加上&qu ...

  2. NSUserDefaults设置bool值重新启动后bool仅仅设置丢失问题

    今天使用NSUserDefaults保存bool至重新启动后发现bool值没有保存对 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults ...

  3. Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)

    1,通讯录访问介绍 通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息.要实现访问通讯录有如下两种方式: (1)AddressBook.framework框架 : 没有界面,通过代码 ...

  4. Good Bye 2013---B. New Year Present

    New Year Present time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. MSSQL - 逻辑主键、业务主键和复合主键

    转载自:http://blog.csdn.net/sunrise918/article/details/5575054 这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论 ...

  6. (摘录)26个ASP.NET常用性能优化方法

    数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池(Co ...

  7. 技术回归01-Windows内存分配工具

    很久没有写技术方面的东西了,这半年主要是在学习别人的东西,对自己提高比较大,算是一次技术回笼吧,这次学习之旅目的是结束技术方面的专注,开始向应用方面找突破口,也就是完成技术积累或者为技术的积累做坚实的 ...

  8. windows和linux套接字中的select机制浅析

    先来谈谈为什么会出现select函数,也就是select是解决什么问题的? 平常使用的recv函数时阻塞的,也就是如果没有数据可读,recv就会一直阻塞在那里,这是如果有另外一个连接过来,就得一直等待 ...

  9. 使用JDBC进行数据库的事务操作(1)

    本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作.下一篇会讲述如何使用JDBC进行数据库的事务操作. 事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑 ...

  10. asp.net iis URLRewrite 实现方法详解

    原文 asp.net iis URLRewrite 实现方法详解 实现非常简单首先你要在你的项目里引用两个dll:actionlessform.dll.urlrewriter.dll,真正实现重写的是 ...