自定义组件(DrawView) 提高代码复用性
2016-07-02 13:25
134 查看
编写DrawView的代码:
package com.example.drawview;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class DrawView extends View {
Paint paint = null;
float startX = 0;//用来缓冲起始位置x
float startY = 0;//用来缓冲起始位置y
float stopX = 0;
float stopY = 0;
Bitmap cache = null;
private Canvas cacheCanvas;
private Matrix matrix;
/*
* XML 生成一个View对象的时候会被调用。且有样式设置的时候调用这个构造函数
*/
public DrawView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
/**
* xml生成View且没有设置样式主题的时候会被调用
*/
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
/**
* 通过代码创建的时候会被调用
*/
public DrawView(Context context) {
super(context);
init();
}
//定义一个初始化的方法
private void init()
{
paint = new Paint();
matrix = new Matrix();
}
/**
*/
@Override
protected void onDraw(Canvas canvas) {
if(cache == null)
{
cache = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);
cacheCanvas = new Canvas(cache);
//这个方法会把view要显示的内容绘制到界面上
cacheCanvas.drawColor(0xffaaaaaa);
}
cacheCanvas.drawLine(startX, startY, stopX, stopY, paint);
startX = stopX;
startY = stopY;
canvas.drawBitmap(cache, matrix, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
stopX = event.getX();
stopY = event.getY();
invalidate();//通知界面绘制内容
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
}
编写ScondActivity代码:(调用DrawView中的代码)
package com.example.drawview;
import android.app.Activity;
import android.os.Bundle;
public class ScondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DrawView view = new DrawView(this);//调用DrawView类,直接使用,提高代码复用性
this.setContentView(view);
}
}
最后在MainActivity中调用,使之回调到主Activity上:
package com.example.drawview;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void skip(View view)
{
Intent intent = new Intent(this, ScondActivity.class);
startActivity(intent);
}
}
降低各个组件之间的偶合度,提高代码复用性!!!(类似Java EE中的MVC设计模式)
package com.example.drawview;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class DrawView extends View {
Paint paint = null;
float startX = 0;//用来缓冲起始位置x
float startY = 0;//用来缓冲起始位置y
float stopX = 0;
float stopY = 0;
Bitmap cache = null;
private Canvas cacheCanvas;
private Matrix matrix;
/*
* XML 生成一个View对象的时候会被调用。且有样式设置的时候调用这个构造函数
*/
public DrawView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
/**
* xml生成View且没有设置样式主题的时候会被调用
*/
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
/**
* 通过代码创建的时候会被调用
*/
public DrawView(Context context) {
super(context);
init();
}
//定义一个初始化的方法
private void init()
{
paint = new Paint();
matrix = new Matrix();
}
/**
*/
@Override
protected void onDraw(Canvas canvas) {
if(cache == null)
{
cache = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);
cacheCanvas = new Canvas(cache);
//这个方法会把view要显示的内容绘制到界面上
cacheCanvas.drawColor(0xffaaaaaa);
}
cacheCanvas.drawLine(startX, startY, stopX, stopY, paint);
startX = stopX;
startY = stopY;
canvas.drawBitmap(cache, matrix, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
stopX = event.getX();
stopY = event.getY();
invalidate();//通知界面绘制内容
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
}
编写ScondActivity代码:(调用DrawView中的代码)
package com.example.drawview;
import android.app.Activity;
import android.os.Bundle;
public class ScondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DrawView view = new DrawView(this);//调用DrawView类,直接使用,提高代码复用性
this.setContentView(view);
}
}
最后在MainActivity中调用,使之回调到主Activity上:
package com.example.drawview;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void skip(View view)
{
Intent intent = new Intent(this, ScondActivity.class);
startActivity(intent);
}
}
降低各个组件之间的偶合度,提高代码复用性!!!(类似Java EE中的MVC设计模式)
相关文章推荐
- 触摸java常量池
- 浅谈Java并发编程系列(二)—— Java内存模型
- 编程提示
- 组合框QComboBox的定制
- Matlab中findstr()与strfind()的区别
- 性能优化-代码-tips
- 将JAVA文件从GBK转UTF8批量操作
- 【GOF23设计模式】_状态模式_UML状态图_酒店系统房间状态_线程对象状态切换JAVA250
- 在Eclipse中安装Zookeeper状态查看插件
- SpringMvc父子容器
- ireport、jasperreport报错信息
- Pycharm下的Anaconda配置
- Mac管理多个Java版本
- java常量池技术
- 一些常用封装的PHP函数
- 深入理解java异常处理机制
- 【Struts2实现文件上传】struts2上传文件异常总结及解决方式
- 《Java JD7 学习笔记》课后练习题4
- Matlab中dir命令
- mongo集群分片