自定义布局RelativeLayout 画网格线

在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 画网格线,布布扣,bubuko.com

时间: 2024-08-19 13:47:38

自定义布局RelativeLayout 画网格线的相关文章

定义自己的布局RelativeLayout 绘制网格线

在Android画线必须由一个载体,无论是控制,无论是布局.实际上它们是从继承View.由画线的方式自己的控制或布局的定义是最常见的. 以下是在其定义中的小样本实现RelativeLayout绘制网络格线 代码下载:http://download.csdn.net/detail/yxg190221/7589287 自己定义控件代码: </pre><pre name="code" class="java">package layout.layo

Android 自定义布局 性能问题 初探

大家在写android 代码的时候,基本上都使用过如下几种布局 RelativeLayout,LinearLayout, FrameLayout 但是很多时候 这几种布局 也无法满足我们的使用.于是我们会考虑用自定义布局,使用自定义布局会有几个优点 比如可以减少view的使用啊,让ui显示的更加有效率啊,以及实现一些原生控件无法实现的效果. 我们首先去github上 下载一个开源项目 https://github.com/lucasr/android-layout-samples 注意这个项目是

深入解析_Android的自定义布局

前言: 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了) Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种Android自定义布局方案所写的示例项目讲解了它们各自的优劣以及四种方案之间的比较.看完这篇文章,也让我对Android 自定义布局有了进一步的了解,于是趁着兴头,我把它翻译成中文,原文链接在此. 只要你写过Android程序,你肯定使用过Android平台内建的几个布局——RelativeLayout

AcitonBar 自定义布局

Android系统中ActionBar默认的布局不美观且难于控制,通过为ActionBar自定义布局的方式可以灵活控制ActionBar. 自定义Activity主题和ActionBar样式 在新建的android工程的res/values/styles.xml添加自定义ActionBar样式的代码和自定义Activity主题的代码,并在AndroidMainfest.xml中给需要使用该自定义ActionBar的Activity中加入该主题: (1)自定义ActionBar样式代码如下: <!

Android自定义布局

1.首先新建属性文件 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="topbar"> <attr name="title" format="string"/> <attr name="titleTextSize" format=&

深入解析Android的自定义布局

原文链接:http://greenrobot.me/devpost/android-custom-layout/ 写在前面的话: 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了)Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种Android自定义布局方案所写的示例项目讲解了它们各自的优劣以及四种方案之间的比较.看完这篇文章,也让我对Android 自定义布局有了进一步的了解,于是趁着兴头,我把它翻译成中文,原

Android自定义布局的三种实现方式

在毕设项目中多处用到自定义布局,一直打算总结一下自定义布局的实现方式,今天就来总结一下吧.在此之前学习了郭霖大神博客上面关于自定义View的几篇博文,感觉受益良多,本文中就参考了其中的一些内容. 总结来说,自定义布局的实现有三种方式,分别是:组合控件.自绘控件和继承控件.下面将分别对这三种方式进行介绍. (一)组合控件 组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件.比如很多应用中普遍使用的标题栏控件,其实用的就是组合控件,那么下面将通过实现一个简单

创建自定义布局,实现接口回调方法

//自定义布局 public class MyLayout extends RelativeLayout{ private Context mContext; private ICallBack mCallBack; public void setCallBack(ICallBack cb){ mCallBack = cb; } /** * 接口 */ public interface ICallBack{ public void update(); } public boolean onTou

自定义布局

1.创建一个你喜欢的view_setting_item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height=&q