java - 允许用户在 Canvas 上绘图

标签 java android android-canvas

我正在尝试设置一个 child 应用程序,可以在 Canvas 上绘图。

我有一个带有 ImageView 的布局,看起来像这样: enter image description here

带有字母的绿色背景是 ImageView , Canvas 应覆盖其中并允许用户在其上绘图。另外,我想允许用户通过按下彩色地球仪来更改颜色描边。

我该如何继续下去?

最佳答案

这里的答案可能会帮助您允许用户使用 Canvas :https://stackoverflow.com/a/7401699/2698582.

要允许用户使用不同的颜色进行绘制,您可以使用颜色选择器,例如:https://code.google.com/p/android-color-picker/,或者您可以通过 google 搜索其他的。

如果您定义一个新的点类并更改此示例代码的一些内容,您将能够添加此颜色更改:

private class ColoredPoint {
    public int x, y, color = Color.BLACK;
}

public class DrawView extends View implements OnTouchListener {
    List<ColoredPoint> points = new ArrayList<ColoredPoint>();
    Paint paint = new Paint();
    int currentColor = Color.BLACK;

    public DrawView(Context context) {
        super(context);
        setFocusable(true);
        setFocusableInTouchMode(true);
        this.setOnTouchListener(this);
        paint.setColor(currentColor);
    }

    @Override
    public void onDraw(Canvas canvas) {
        for (ColoredPoint point : points) {
            paint.setColor(point.color);
            canvas.drawCircle(point.x, point.y, 2, paint);  
        }
    }

    public boolean onTouch(View view, MotionEvent event) {
        ColoredPoint point = new ColoredPoint();
        point.color = currentColor;
        point.x = event.getX();
        point.y = event.getY();
        points.add(point);
        invalidate();
        return true;
    }
}

最后,根据您选择的颜色选择器,此代码会有所不同。基本上,您将向彩色地球仪添加一个触摸监听器以显示颜色弹出窗口。假设弹出窗口有一个“确定”按钮,您将向该按钮添加一个按钮监听器。按下时,将变量“currentColor”更改为所选颜色。

正如该示例文章中提到的,您还可以使用 Lines 来实现此目的。您可以考虑改用 GestureDetector。本教程应该有助于准确解释 GestureDetector 的工作原理:http://developer.android.com/training/gestures/detector.html.

关于java - 允许用户在 Canvas 上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18340260/

相关文章:

Android:展开/折叠动画

java - 在 Canvas 上绘制 LinearLayout View 消失

android - 为什么图像上的油漆变慢?

java - 等效于 Java 8 中的 Scala 的 foldLeft

Java isAlive() 和 join()

java - Native.loadLibrary 中的选项

java - 如何在java中打印所有目录和文件以及所有子目录和文件

android - Flutter:让 iFame 在 Android 设备上全屏显示

java - 在android中请求位置

android - 如何在 RecycleViewer 中更改 Canvas?