在Android中画线必须由一个载体,要么是一个控件,要么是一个布局,其实他们都是继承自View,通过自定义控件或布局的方式画线是最常见的。下面的小例子实现了在自定义RelativeLayout中画网格线

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

自定义控件代码:

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);}@Overrideprotected 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;@Overrideprotected 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() {@Overridepublic void onClick(View arg0) {rl.setInf(100, 100, 1280, 720);//画网格线}});btnClear.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {rl.clearLine();//擦除网格线}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}



更多相关文章

  1. android 随笔记录1
  2. Android(安卓)在OnCreate获取需要控件的高度,宽度,textview的行数
  3. Android实现图片自动切换
  4. android之socket编程实例一
  5. Android(安卓)开发知识点总结
  6. 客户关系管理
  7. Android(安卓)Studio配置javah自动生成头文件
  8. Android(安卓)studio高级使用快捷键
  9. android jni 学习笔记2

随机推荐

  1. android 用post方式上传图片到服务器
  2. Android Studio Lambda表达式的使用
  3. android之BroadcastReceiver实例
  4. edittext获取焦点并弹出软键盘
  5. Activity跳转黑屏,闪屏,白屏解决
  6. android 判断ImageView当前显示的是哪一
  7. Android Studio Gradle简单使用
  8. 图片加载框架简单介绍 ImageLoader 的基
  9. [置顶] 使用Android(安卓)OpenGL ES 2.0
  10. Dockerfile中使用sdkmanager安装Android(