博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定义自己的布局RelativeLayout 绘制网格线
阅读量:5064 次
发布时间:2019-06-12

本文共 2857 字,大约阅读时间需要 9 分钟。

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

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

代码下载:

自己定义控件代码:

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;	}}

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

转载于:https://www.cnblogs.com/hrhguanli/p/4660710.html

你可能感兴趣的文章
银行排队问题(详解队列)
查看>>
input输入提示历史记录
查看>>
序列化和反序列化(1)---[Serializable]
查看>>
SQL优化
查看>>
利用Highcharts插件制作动态图表
查看>>
用C语言操纵Mysql
查看>>
轻松学MVC4.0–6 MVC的执行流程
查看>>
4.9 Parser Generators
查看>>
[10月18日的脚本] 从Access中导入多个表到Excel
查看>>
centos下安装nginx
查看>>
redis集群如何清理前缀相同的key
查看>>
redis7--hash set的操作
查看>>
20.字典
查看>>
Python 集合(Set)、字典(Dictionary)
查看>>
oracle用户锁定
查看>>
(转)盒子概念和DiV布局
查看>>
Android快速实现二维码扫描--Zxing
查看>>
获取元素
查看>>
nginx+lighttpd+memcache+mysql配置与调试
查看>>
ubuntu12.04 启动apache2 对.htaccess 的支持
查看>>