Рисование по клику в Android - PullRequest
       24

Рисование по клику в Android

0 голосов
/ 22 января 2011

Я пытаюсь создать программу, которая создает график, используя значения, введенные пользователем из 2 полей EditText. Программа должна использовать этот ввод для рисования линии от центра оси до точки, указанной в информации. У меня есть кнопка, которая при каждом нажатии должна создавать новую линию в указанной точке (таким образом, может быть более одной линии). Я создал собственное представление для удержания оси, но оно использует его метод onDraw, очевидно, Я не могу использовать это также, чтобы нарисовать новую линию.

Вот код для моего пользовательского представления:

package android.physicsengine;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class AxisDrawing extends View{

public AxisDrawing(Context context){

    super(context);
}
public AxisDrawing(Context context, AttributeSet attrs){

    super(context, attrs);

}
public AxisDrawing(Context context, AttributeSet attrs, int defStyle){

    super(context, attrs, defStyle);
}

@Override
protected void onDraw(Canvas canvas){
    canvas.drawColor(Color.BLACK);
    Paint linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    linePaint.setColor(Color.RED);
    canvas.drawLine(canvas.getWidth()/2, canvas.getHeight()/2-200,        canvas.getWidth()/2 ,canvas.getHeight()/2+100, linePaint);
    canvas.drawLine(canvas.getWidth()/2-150, canvas.getHeight()/2-75, canvas.getWidth()/2+150 ,canvas.getHeight()/2-75, linePaint);
}
}

Ответы [ 2 ]

1 голос
/ 22 января 2011

Если ваш пользовательский класс представления определен в действии, то он является внутренним классом этого действия и имеет доступ к переменным и массивам, которые определены на уровне действия.

Каждый раз, когда пользователь щелкаетКнопка, вы должны обработать и сохранить информацию в этих общих переменных или массивах, к которым может обратиться onDraw, и из них вычислить следующую строку или весь график.Если ваше пользовательское представление является отдельным классом, то вам нужно передать данные, один из способов сделать это - использовать статические переменные.

, чтобы метод onDraw () снова нарисовал ваш график, и вам нужно указать:

myCustomView.invalidate ();

в событии нажатия кнопки, сразу после установки новых данных для графика.

0 голосов
/ 16 июля 2013

Вам просто нужно установить данные в представлении custum (глобально) и вызвать invalidate, который перерисовает представление.

importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.util.AttributeSet;
importandroid.view.View;


@Override
protectedvoidonDraw(Canvascanvas
{

    canvas.drawColor(Color.BLACK);
        PaintlinePaint=newPaint(Paint.ANTI_ALIAS_FLAG);
    linePaint.setColor(Color.RED);
    canvas.drawLine(data,data,getWidtt()-data,getHeight()-data,linePaint);

    //you can also pplaceinvalidate() here which will recursively redraw the canvas in aloop

}

publicvoidsetData(intdata)
{
    this.data=data;
    invalidate();
}
}
...