java - Android 在启动时在 Canvas 上绘制白色

标签 java android xml canvas

我想在白色 Canvas 上画红色圆圈,但它是黑色的,只有第一次触摸后才会变成白色,所以我希望它一开始就是白色的。这是我的代码。 (我也想知道为什么 float 按钮不显示:D)

DrawingView.java:

class DrawingView extends SurfaceView {

private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private final SurfaceHolder surfaceHolder;
private ArrayList<Point> points;

public DrawingView(Context context, AttributeSet attrs) {
    super(context, attrs);
    paint.setColor(Color.RED);
    surfaceHolder = getHolder();
    paint.setStyle(Paint.Style.FILL);
    setFocusable(true);
    setFocusableInTouchMode(true);
    points = new ArrayList<>();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    points.add(new Point((int) event.getX(), (int) event.getY()));
    Canvas canvas = surfaceHolder.lockCanvas();
    canvas.drawColor(Color.WHITE);
    for (Point p : points)
        canvas.drawCircle(p.x, p.y, 50, paint);
    surfaceHolder.unlockCanvasAndPost(canvas);
    return false;
}

}

MainActivity.java:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, 0, 0, "Save")
            .setIcon(R.drawable.ic_save)
            .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    // do some magic to save :D
                    return false;
                }
            })
            .setShowAsAction(
                    MenuItem.SHOW_AS_ACTION_ALWAYS
                            | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return super.onCreateOptionsMenu(menu);
}

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<com.github.clans.fab.FloatingActionMenu
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:layout_marginLeft="10dp"
    fab:menu_fab_size="normal"
    fab:menu_showShadow="true"
    fab:menu_shadowColor="#66000000"
    fab:menu_shadowRadius="4dp"
    fab:menu_shadowXOffset="1dp"
    fab:menu_shadowYOffset="3dp"
    fab:menu_colorNormal="#DA4336"
    fab:menu_colorPressed="#E75043"
    fab:menu_colorRipple="#99FFFFFF"
    fab:menu_animationDelayPerItem="50"
    fab:menu_icon="@drawable/fab_add"
    fab:menu_buttonSpacing="0dp"
    fab:menu_labels_margin="0dp"
    fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
    fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
    fab:menu_labels_paddingTop="4dp"
    fab:menu_labels_paddingRight="8dp"
    fab:menu_labels_paddingBottom="4dp"
    fab:menu_labels_paddingLeft="8dp"
    fab:menu_labels_padding="8dp"
    fab:menu_labels_textColor="#FFFFFF"
    fab:menu_labels_textSize="14sp"
    fab:menu_labels_cornerRadius="3dp"
    fab:menu_labels_colorNormal="#333333"
    fab:menu_labels_colorPressed="#444444"
    fab:menu_labels_colorRipple="#66FFFFFF"
    fab:menu_labels_showShadow="true"
    fab:menu_labels_singleLine="false"
    fab:menu_labels_ellipsize="none"
    fab:menu_labels_maxLines="-1"
    fab:menu_labels_position="left"
    fab:menu_openDirection="up"
    fab:menu_backgroundColor="@android:color/transparent"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true">

    <com.github.clans.fab.FloatingActionButton
        android:id="@+id/insertPhoto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_insert_photo_24dp"
        fab:fab_size="mini"
        fab:fab_label="Add photos" />

    <com.github.clans.fab.FloatingActionButton
        android:id="@+id/addCircle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_brightness_1_24dp"
        fab:fab_size="mini"
        fab:fab_label="Add circles" />

</com.github.clans.fab.FloatingActionMenu>

<reminder.com.paint.DrawingView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

最佳答案

使用此DrawingView类

public class DrawView extends View implements View.OnTouchListener {
private List<Point> points = new ArrayList<>();
private Paint paint = new Paint();

public DrawView(Context c) {
    super(c);
    setFocusable(true);
    setFocusableInTouchMode(true);
    this.setOnTouchListener(this);
    paint.setColor(Color.BLACK);
}

@Override
public void onDraw(Canvas canvas) {
    for (Point point : points) {
        canvas.drawCircle(point.x, point.y, point.radius, point.paint);
    }
}

public boolean onTouch(View view, MotionEvent event) {
    Point point = new Point();
    point.x = event.getX();
    point.y = event.getY();
    point.radius = 30;
    int c = DrawingPage.selectedColorRGB;
    point.paint = new Paint();
    point.paint.setColor(c);
    points.add(point);
    invalidate();
    return true;
}}

在主要 Activity 中

drawView = new DrawView(getApplicationContext());
drawView.setBackgroundColor(Color.WHITE);
drawView.requestFocus();

关于java - Android 在启动时在 Canvas 上绘制白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530782/

相关文章:

android - 在 android eclipse 中为标签 TextView 找到意外的命名空间前缀 "android"

指定路径的Java JDK静默安装

java - 为什么jDateChooser的值又回到默认值了?

Java RMI : how InitialContext. Lookup() 有效

android - 如何以编程方式在 R.color 中设置颜色

android - 将 Android MediaCodec 编码的 H264 数据包复用到 RTMP 中

java - 在方法内部的 super 引用之前显示字段/变量 :JAVA

android - 动画删除 ListView 项

php - 将推文存储到数据库中的简单方法是什么?

xml - Spring 数据 xml 配置模式验证错误