Java 如何更改活动中的抽绳颜色

Java 如何更改活动中的抽绳颜色,java,android,android-custom-view,Java,Android,Android Custom View,我有以下TestView类: package com.example.tview; import android.os.Bundle; import android.app.Activity; import android.graphics.Typeface; import android.view.Gravity; import android.view.ViewGroup.LayoutParams; import android.widget.FrameLayout; public cl

我有以下TestView类:

package com.example.tview;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Typeface;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;

public class TestView extends Activity {
    FrameLayout layout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_view);
        layout = (FrameLayout)findViewById(R.id.viewd);
        //layout.removeAllViews();
        CustomView view = new CustomView(TestView.this);
        view.setText("A");
        view.setGravity(Gravity.CENTER);
        view.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/led.ttf"));
        view.setTextSize(400);
        view.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        layout.addView(view);
    }
}
package com.example.tview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.widget.TextView;

public class CustomView extends TextView {
    Paint paint;
    Path path;
    float x = 0;
    float y = 0;
    private int cYellow = Color.YELLOW;
    private int[] theColors = {Color.YELLOW, Color.BLUE, Color.GREEN, Color.BLACK, Color.RED, Color.CYAN, Color.DKGRAY, Color.WHITE, Color.BLACK, Color.MAGENTA};

    public CustomView(Context context) {
        super(context);
        paint = new Paint();
        path= new Path();
        paint.setAlpha(255);
        paint.setColor(cYellow);
        paint.setStyle(Style.STROKE);
        paint.setStrokeWidth(20);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(path,paint);
        canvas.drawCircle(x, y, 10, paint);
    }

    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(event.getX(), event.getY());
            path.lineTo(event.getX(), event.getY());
            break;
        case MotionEvent.ACTION_MOVE:
            x = event.getX();
            y = event.getY();
            path.lineTo(x, y);
            invalidate();
            break;
        case MotionEvent.ACTION_UP:
            path.lineTo(event.getX(), event.getY());
            break;
        case MotionEvent.ACTION_CANCEL:
            break;
        default:
            break;
        }
        return true;
    }
}
CustomView类:

package com.example.tview;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Typeface;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;

public class TestView extends Activity {
    FrameLayout layout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_view);
        layout = (FrameLayout)findViewById(R.id.viewd);
        //layout.removeAllViews();
        CustomView view = new CustomView(TestView.this);
        view.setText("A");
        view.setGravity(Gravity.CENTER);
        view.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/led.ttf"));
        view.setTextSize(400);
        view.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        layout.addView(view);
    }
}
package com.example.tview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.widget.TextView;

public class CustomView extends TextView {
    Paint paint;
    Path path;
    float x = 0;
    float y = 0;
    private int cYellow = Color.YELLOW;
    private int[] theColors = {Color.YELLOW, Color.BLUE, Color.GREEN, Color.BLACK, Color.RED, Color.CYAN, Color.DKGRAY, Color.WHITE, Color.BLACK, Color.MAGENTA};

    public CustomView(Context context) {
        super(context);
        paint = new Paint();
        path= new Path();
        paint.setAlpha(255);
        paint.setColor(cYellow);
        paint.setStyle(Style.STROKE);
        paint.setStrokeWidth(20);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(path,paint);
        canvas.drawCircle(x, y, 10, paint);
    }

    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(event.getX(), event.getY());
            path.lineTo(event.getX(), event.getY());
            break;
        case MotionEvent.ACTION_MOVE:
            x = event.getX();
            y = event.getY();
            path.lineTo(x, y);
            invalidate();
            break;
        case MotionEvent.ACTION_UP:
            path.lineTo(event.getX(), event.getY());
            break;
        case MotionEvent.ACTION_CANCEL:
            break;
        default:
            break;
        }
        return true;
    }
}
我的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#000000"
android:layout_gravity="center" >

        <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="YELLOW" />
                <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GREEN" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="250dp"
android:orientation="vertical"
android:background="#ffffff"
android:layout_gravity="center" >

<FrameLayout
android:id="@+id/viewd"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bd"
android:orientation="vertical" >
</FrameLayout>
</LinearLayout>


</LinearLayout>

您已经定义了在画布上绘制时使用的绘制。按下按钮,将适当的颜色设置为您的绘画:

paint.setColor(Color);

每次按下按钮时,将该行设置为正确的颜色。
theColor
是一个整数数组,由于设置的颜色在不同的类中,如何实现它?将全局变量paintColor设置为int。为每个按钮编写一个侦听器。单击时,在侦听器中,为paintColor变量指定适当的值。现在,您的绘制也是一个全局变量。因此,您可以在任何时候为它设置颜色,如:paint.setColor(paintColor)。你不需要你的颜色数组。我希望你明白我的意思。我现在理解的更多的是编程逻辑。即使它们在不同的类中,它们仍然可以通信?我用更新的类代码更新了我的问题,但现在当我按下绿色按钮时,我得到了一个NPE。无所谓。我更新了我修改过的类以使其工作。谢谢(有一个问题,当我更改颜色时,如何防止前面的行更改,而仅在更改颜色后绘制时更改颜色?)