Android画板

这是一个介绍如何创建简单Android画板应用的教程。通过MyView.java实现,应用能展示一个画布供用户绘制,并提供清理功能以清除画布上的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android画板:

本案例是一个简单的Android小应用,仅供大家学习

MyView.java

package com.example.drawboard;

import android.R.color;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;


public class MyView extends SurfaceView implements Callback,OnTouchListener{
	private Paint paint = new Paint();//创建一个画笔对象
	private Path path = new Path();//创建一个路径对象
	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		getHolder().addCallback(this);//添加回调函数
		paint.setColor(Color.RED);//设置画笔颜色
		paint.setTextSize(10);//设置画笔粗细
		paint.setAntiAlias(true);//清理锯齿
		paint.setStyle(Style.STROKE);//设置画笔为空心
		setOnTouchListener(this);//添加触摸监听事件
	}
	//定义绘画方法
	public void draw() {
		//添加画布并且锁定
		Canvas canvas = getHolder().lockCanvas();
		canvas.drawColor(Color.WHITE);//初始化画布的颜色为白色
		canvas.drawPath(path, paint);
		
		//清理画布
		getHolder().unlockCanvasAndPost(canvas);
		
		
		
	}
	//定义清除画布方法
	public void clear() {
		path.reset();//路径重置,清除画布
		draw();//如果不再次调用此方法,则清除画布之后,将不能再绘画
	}
	@Override
	public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void surfaceCreated(SurfaceHolder arg0) {
		// TODO Auto-generated method stub
		draw();
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder arg0) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public boolean onTouch(View arg0, MotionEvent event) {
		// TODO Auto-generated method stub
		//判断动作事件
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN://按下事件
			path.moveTo(event.getX(), event.getY());//获取X和Y坐标
			draw();//开始绘制
			break;

		case MotionEvent.ACTION_MOVE://移动事件
			path.lineTo(event.getX(), event.getY());//获取移动时的x和y坐标
			draw();//开始绘制
			break;
		}
		return true;
	}

}

MainActivity.java

package com.example.drawboard;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button btn;
	private MyView view;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn = (Button)findViewById(R.id.btn);
		view = (MyView)findViewById(R.id.draw);
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				view.clear();
			}
		});
	}

}

activity_main.xml
<pre name="code" class="java"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   	android:orientation="vertical"
    tools:context=".MainActivity" >

    <com.example.drawboard.MyView
        android:id="@+id/draw"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
    <Button
        android:id="@+id/btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="清理画布"/>

</LinearLayout>


 

运行之后如图:

点击清理画布可以清除所画内容

### Android 平台画板开发教程 #### 创建自定义视图类 为了实现在Android平台上绘制的功能,通常会创建一个继承`View`的自定义组件来处理触摸事件并执行绘图操作。此类需重写`onDraw()`方法用于屏幕刷新时重新描绘图像[^1]。 ```java public class DrawingView extends View { private Paint drawPaint; public DrawingView(Context context, AttributeSet attrs){ super(context, attrs); setupDrawing(); } private void setupDrawing(){ drawPaint = new Paint(); drawPaint.setColor(Color.BLACK); // 设置默认颜色为黑色 drawPaint.setAntiAlias(true); drawPaint.setStrokeWidth(5); drawPaint.setStyle(Paint.Style.STROKE); drawPaint.setStrokeJoin(Paint.Join.ROUND); drawPaint.setStrokeCap(Paint.Cap.ROUND); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制逻辑... } } ``` #### 处理触控输入 通过实现`OnTouchListener`接口监听用户的触摸动作,在`onTouch()`函数内捕捉到手指移动轨迹后调用相应的绘画指令完成线条或其他形状的绘制工作[^2]。 ```java drawingView.setOnTouchListener(new OnTouchListener() { float startX, startY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: path.moveTo(event.getX(), event.getY()); break; case MotionEvent.ACTION_MOVE: path.lineTo(event.getX(), event.getY()); invalidate(); // 请求重绘 break; } return true; // 表明已消费此事件 } }); ``` #### 用户交互设计 考虑到用户体验方面的需求,可以考虑加入更多实用特性比如撤销/恢复功能、改变笔刷大小与色彩选项等,使软件更加友好易用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值