📅  最后修改于: 2023-12-03 15:38:30.351000             🧑  作者: Mango
在Android中,你可以使用Paint类来创建充满创意的绘画和图形。这篇文章将带领你了解如何在Android中创建Paint应用程序。
首先,让我们创建一个新的Android项目。打开Android Studio并选择“Create New Project”,然后按照屏幕上的指示完成创建项目的步骤。
在这一步中,我们需要创建一个布局文件来放置我们的绘图视图。在res/layout文件夹中,创建一个新的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">
<com.example.paint.PaintView
android:id="@+id/paint_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:id="@+id/color_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
<View
android:id="@+id/color1"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="@color/color1" />
<View
android:id="@+id/color2"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="@color/color2" />
<View
android:id="@+id/color3"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="@color/color3" />
<View
android:id="@+id/color4"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="@color/color4" />
<View
android:id="@+id/color5"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="@color/color5" />
<Button
android:id="@+id/eraser_button"
android:layout_width="80dp"
android:layout_height="50dp"
android:text="Eraser" />
<Button
android:id="@+id/clear_button"
android:layout_width="80dp"
android:layout_height="50dp"
android:text="Clear" />
</LinearLayout>
</RelativeLayout>
PaintView是我们自定义视图的类。在我们的XML布局文件中,我们将需要的自定义视图添加到RelativeLayout中。Color_picker是一个LinearLayout,包含五个颜色的View,以及橡皮擦和清除按钮。
接下来,我们需要创建PaintView类。我们将在此类中实现绘制图形和颜色选取器。
public class PaintView extends View implements View.OnTouchListener {
private Path path; //路径
private Paint brush = new Paint(); //画刷
private ArrayList<Path> paths = new ArrayList<>(); //路径列表
private ArrayList<Integer> colors = new ArrayList<>(); //颜色列表
private int currentColor; //当前颜色
public PaintView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
setBackgroundColor(Color.WHITE);
// 初始化画刷
brush.setAntiAlias(true);
brush.setColor(Color.BLACK);
brush.setStyle(Paint.Style.STROKE);
brush.setStrokeJoin(Paint.Join.ROUND);
brush.setStrokeWidth(6f);
setOnTouchListener(this);
}
@Override
protected void onDraw(Canvas canvas) {
for (int i = 0; i < paths.size(); i++) {
brush.setColor(colors.get(i));
canvas.drawPath(paths.get(i), brush);
}
}
public void setColor(String color) {
switch(color) {
case "color1":
currentColor = getResources().getColor(R.color.color1);
break;
case "color2":
currentColor = getResources().getColor(R.color.color2);
break;
case "color3":
currentColor = getResources().getColor(R.color.color3);
break;
case "color4":
currentColor = getResources().getColor(R.color.color4);
break;
case "color5":
currentColor = getResources().getColor(R.color.color5);
break;
}
brush.setColor(currentColor);
}
private float x, y;
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path = new Path();
paths.add(path);
colors.add(currentColor);
path.moveTo(event.getX(), event.getY());
x = event.getX();
y = event.getY();
return true;
case MotionEvent.ACTION_MOVE:
path.quadTo(x, y, (event.getX() + x)/2, (event.getY() + y)/2);
x = event.getX();
y = event.getY();
break;
case MotionEvent.ACTION_UP:
path.lineTo(x, y);
break;
default:
return false;
}
this.invalidate();
return true;
}
public void clearCanvas() {
paths.clear();
colors.clear();
setBackgroundColor(Color.WHITE);
invalidate();
}
public void setEraser() {
brush.setColor(Color.WHITE);
}
}
在我们的PaintView类中,我们实现了我们绘制图形和颜色选取器的代码。我们重写了onDraw()方法和onTouchEvent()方法。onDraw()方法绘制所需的路径和颜色。onTouchEvent()方法响应触摸事件并绘制路径。
public class MainActivity extends AppCompatActivity {
private PaintView paintView;
private Button clearButton, eraserButton;
private View color1, color2, color3, color4, color5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
paintView = findViewById(R.id.paint_view);
clearButton = findViewById(R.id.clear_button);
eraserButton = findViewById(R.id.eraser_button);
color1 = findViewById(R.id.color1);
color2 = findViewById(R.id.color2);
color3 = findViewById(R.id.color3);
color4 = findViewById(R.id.color4);
color5 = findViewById(R.id.color5);
setClickListeners();
}
private void setClickListeners() {
color1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
paintView.setColor("color1");
}
});
color2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
paintView.setColor("color2");
}
});
color3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
paintView.setColor("color3");
}
});
color4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
paintView.setColor("color4");
}
});
color5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
paintView.setColor("color5");
}
});
clearButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
paintView.clearCanvas();
}
});
eraserButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
paintView.setEraser();
}
});
}
}
在MainActivity中,我们绑定XML视图,添加点击监听器,并将按钮和颜色视图绑定到PaintView,使用户可以轻松选择颜色和控制画刷。
好了,现在你已经创建了一个基本的Paint应用程序。在Android模拟器或物理设备上运行你的应用程序,并进行绘图和测试。