gpt4 book ai didi

java - Android 使用按钮清除 View

转载 作者:行者123 更新时间:2023-11-30 02:04:40 29 4
gpt4 key购买 nike

免责声明:我是 android/java 的新手。

我按照这里的教程进行操作:http://creative-punch.net/2014/03/make-basic-single-touch-drawing-app-android/并添加了几个按钮。我可以获得显示 toast 的按钮,因此按钮可以正常工作,但我不确定如何让按钮访问 MainDrawingView 类以使其清除 View 以摆脱以前的绘图。

这是 MainActivity 类:

package com.mycompany.simpledraw;

import android.content.Context;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import org.w3c.dom.Attr;

public class MainActivity extends ActionBarActivity {

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


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

public void clearButtonClicked (View view){
Toast.makeText(this, "Clear clicked!", Toast.LENGTH_SHORT).show();
}

public void submitButtonClicked (View view){
Toast.makeText(this, "Submit clicked!", Toast.LENGTH_SHORT).show();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

这是 MainDrawingView 类:

package com.mycompany.simpledraw;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.util.ArrayList;

public class MainDrawingView extends View {
private Paint paint = new Paint();
private Path path = new Path();
LineData LD = new LineData();

public MainDrawingView(Context context, AttributeSet attrs) {
super(context, attrs);

paint.setAntiAlias(true);
paint.setStrokeWidth(5f);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
}

@Override
protected void onDraw(Canvas canvas) {
canvas.drawPath(path, paint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
// Get the coordinates of the touch event
float eventX = event.getX();
float eventY = event.getY();

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Set a new starting point
path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
// Connect the points
path.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
break;
default:
return false;
}

// Makes our view repaint and call onDraw
invalidate();
return true;
}

}

这是 activity_main.xml 文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffffff"
tools:context="com.example.app.FullscreenActivity">

<!-- This is the view on which we will draw. -->
<view
android:layout_width="match_parent"
android:layout_height="0dp"
class="com.mycompany.simpledraw.MainDrawingView"
android:id="@+id/single_touch_view"
android:layout_gravity="start|top"
android:layout_weight="1"
android:background="#ffffff" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<Button
android:id="@+id/clear_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/clear_btn"
android:onClick="clearButtonClicked" />

<Button
android:id="@+id/submit_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/submit_btn"
android:onClick="submitButtonClicked"/>

</LinearLayout>


</LinearLayout>

最佳答案

在按钮的处理程序中,您可以使用 Activity 的 findViewById 方法定位 View 。

 public void clearButtonClicked (View view){
MainDrawingView mainDrawingView = (MainDrawingView)findViewById(R.id.single_touch_view);

// Now you can call methods on mainDrawingView
}

请注意 R.id.id.single_touch_view 与您在 activity_main.xml 中分配给 View 的 ID 匹配


在下面的评论中,您提出了第二个问题 - 如何清除 View 。我的建议来自以下内容:Android, canvas: How do I clear (delete contents of) a canvas (= bitmaps), living in a surfaceView? .

1) 在您的 MainDrawingView 类中,添加实例变量

private boolean forceClear;

2) 在您的 MainDrawingView 类中,添加以下方法

public void clearView() {
forceClear = true;
invalidate(); // this will force a call to onDraw
}

3) 在您的 MainDrawingView 类中,按如下方式更新 onDraw 方法。

protected void onDraw(Canvas canvas) {
if (forceClear) {
canvas.drawColor(Color.BLACK); // or whatever color works best for you.
forceClear = false;
} else {
canvas.drawPath(path, paint);
}
}

4) 然后在您的按钮处理程序中,只需调用新方法:

public void clearButtonClicked (View view){
MainDrawingView mainDrawingView = (MainDrawingView)findViewById(R.id.single_touch_view);
mainDrawingView.clearView();
}

关于java - Android 使用按钮清除 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30881289/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com