最近时间比较多,开始学一些android程序。写得不好请多多包涵哈。
这个程序也是参照了网上的一些代码写出来的,并加以简化。
因为程序比较简单,暂时没使用双缓冲技术。实测效果还不错
程序说明:
Canvas -- 相当于画布,图片的所有内容都显示在上面
Paint -- 相当于画笔,本程序设计的画笔是:红色,粗细为5
Path -- 相当于画图的路径
程序代码:
main.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="match_parent"
android:orientation="vertical" >
<com.example.testandroid.DrawView
android:id="@+id/draw_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
<Button
android:id="@+id/btn_clear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:onClick="btn_clear"
android:text="@string/btn_clear" />
</RelativeLayout>
MainActivity.java:
package com.example.testandroid;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void btn_clear(View v) {
DrawView draw_view = (DrawView) findViewById (R.id.draw_view);
draw_view.clear();
}
}
DrawView.java:
package com.example.testandroid;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class DrawView extends View {
private Paint paint;
private Path path;
public DrawView(Context context, AttributeSet set) {
super(context, set);
// 创建画笔
paint = new Paint();
// 画笔颜色
paint.setColor(Color.RED);
// 画笔粗细
paint.setStrokeWidth(5);
// 抗锯齿
paint.setAntiAlias(true);
// 描边,不填充
<span style="white-space:pre"> </span>paint.setStyle(Paint.Style.STROKE);
<span style="white-space:pre"> </span>// 创建path,即绘制路径
path = new Path();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(path, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float currentX = event.getX();
float currentY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN : {
// 画线函数,移动到点(currentX, currentY)
path.moveTo(currentX, currentY);
break;
}
case MotionEvent.ACTION_MOVE : {
// 画线函数,连线到点(currentX, currentY)
path.lineTo(currentX, currentY);
break;
}
case MotionEvent.ACTION_UP : {
//path.reset();
break;
}
}
// 刷新界面,调用onDraw()
invalidate();
// true表明该事件已经处理完毕,不能返回super.onTouchEvent(event)
return true;
}
// 清屏
public void clear() {
// 清除绘制路径
path.reset();
// 刷新界面
invalidate();
}
}
图片就不贴了,画的比较难看哈