在Android studio环境下提供一个实现画板功能的程序
时间: 2024-02-11 22:07:23 浏览: 31
好的,下面是一个简单的画板程序,供你参考:
1. 创建一个新的Android Studio项目,命名为"DrawingBoard",选择"Empty Activity"作为模板。
2. 在res/layout目录下,创建一个新的布局文件,命名为"activity_main.xml",并在其中添加以下代码:
```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">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="matrix"
android:src="@drawable/blank" />
<Button
android:id="@+id/btn_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clear"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_margin="16dp"/>
</RelativeLayout>
```
其中,ImageView用于显示画板内容,按钮用于清空画板。
3. 在res/drawable目录下,创建一个名为"blank.png"的空白图片。
4. 在MainActivity.java中添加以下代码:
```java
public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnTouchListener {
private ImageView mImageView;
private Button mBtnClear;
private Bitmap mBitmap;
private Canvas mCanvas;
private Paint mPaint;
private float mX, mY;
private static final float TOUCH_TOLERANCE = 4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = findViewById(R.id.imageView);
mBtnClear = findViewById(R.id.btn_clear);
mBtnClear.setOnClickListener(this);
mImageView.setOnTouchListener(this);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(12);
mBitmap = Bitmap.createBitmap(1080, 1920, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mImageView.setImageBitmap(mBitmap);
}
private void touchStart(float x, float y) {
mCanvas.drawPoint(x, y, mPaint);
mX = x;
mY = y;
}
private void touchMove(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mCanvas.drawLine(mX, mY, x, y, mPaint);
mX = x;
mY = y;
}
}
private void touchUp() {
mCanvas.drawPoint(mX, mY, mPaint);
}
@Override
public void onClick(View v) {
if (v == mBtnClear) {
mCanvas.drawColor(Color.WHITE);
mImageView.invalidate();
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchStart(x, y);
mImageView.invalidate();
break;
case MotionEvent.ACTION_MOVE:
touchMove(x, y);
mImageView.invalidate();
break;
case MotionEvent.ACTION_UP:
touchUp();
mImageView.invalidate();
break;
}
return true;
}
}
```
其中,onCreate()方法中初始化了画板的相关参数,onClick()方法中实现了清空画板的功能,onTouch()方法中实现了手指滑动时画线的功能。
5. 运行程序,你应该可以在画板上任意涂画,点击Clear按钮可以清空画板。
注意:这个程序只是一个简单的绘图程序,没有做过多的优化或错误处理。如果你要将其用于实际项目中,需要考虑更多的细节问题。