📜  如何在Android中创建Paint应用程序?(1)

📅  最后修改于: 2023-12-03 15:38:30.351000             🧑  作者: Mango

如何在Android中创建Paint应用程序?

在Android中,你可以使用Paint类来创建充满创意的绘画和图形。这篇文章将带领你了解如何在Android中创建Paint应用程序。

步骤1:创建一个新的Android项目

首先,让我们创建一个新的Android项目。打开Android Studio并选择“Create New Project”,然后按照屏幕上的指示完成创建项目的步骤。

步骤2:创建Paint应用程序的布局

在这一步中,我们需要创建一个布局文件来放置我们的绘图视图。在res/layout文件夹中,创建一个新的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">

    <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,以及橡皮擦和清除按钮。

步骤3:创建一个PaintView类

接下来,我们需要创建PaintView类。我们将在此类中实现绘制图形和颜色选取器。

Java代码片段
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()方法响应触摸事件并绘制路径。

步骤4: 在MainActivity中实现Paint应用程序
Java代码片段
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,使用户可以轻松选择颜色和控制画刷。

步骤5:运行你的Paint应用程序

好了,现在你已经创建了一个基本的Paint应用程序。在Android模拟器或物理设备上运行你的应用程序,并进行绘图和测试。