自定义布局RelativeLayout 画网格线
生活随笔
收集整理的這篇文章主要介紹了
自定义布局RelativeLayout 画网格线
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在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);}@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;}}總結
以上是生活随笔為你收集整理的自定义布局RelativeLayout 画网格线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Wear开发者预览版入门
- 下一篇: android自定义布局的使用!