Como obter uma tela atual?

9

Eu tenho o DrawView. Se eu tocar essa visão, desenhe pequenos círculos. Eu não costumo desenhar círculos, mas não tocar a visualização - com a função de ajuda "setPoints". O que eu faço:

package com.samples;
import ...

public class DrawView extends View {
    ArrayList<Point> points = new ArrayList<Point>();

    Paint paint = new Paint();

    private int pSize = 5;
    private int pColor = Color.BLACK;

    public DrawView(Context context, AttributeSet attrs) {

        super(context, attrs);

        setFocusable(true);
        setFocusableInTouchMode(true);

        this.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.setOnTouchListener(this);
                    Point point = new Point();
                    point.x = event.getX();
                    point.y = event.getY();
                    points.add(point); 
                    invalidate();
                }
                return true;
            }
        });
        requestFocus();
    }

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

    public void setPoints(Float xP, Float yP)
    {
        Point point = new Point();
        point.x = xP;
        point.y = yP;
        points.add(point);
        postInvalidate();
    }
}

class Point {
    float x, y;

    @Override
    public String toString() {
        return x + ", " + y;
    }
}

Por favor, diga-me, como obter a função setPoints da tela?

Atualização: Uau, é um problema muito interessante. Meu DrawView contém em HorizontalScrollView. Porque se eu definir neste DrawView coordenadas à direita, ninguém sabe onde estão círculos desenhados.

    
por Leo 10.02.2012 в 20:41
fonte

3 respostas

4

Você não pode. A tela é gerenciada pelo sistema e é passada para o seu onDraw() . Eu não entendo porque você precisa disso fora de lá. Apenas redeclare setPoints like this

public void setPoints(Canvas canvas, Float xP, Float Yp)

Você pode manter um cache dos desenhos anteriores (ou armazenar os pontos anteriores)

    
por Raffaele 10.02.2012 / 21:08
fonte
1

Tente declarar canvas2 como uma variável pública na classe DrawView.

    
por 8oh8 10.02.2012 / 21:05
fonte
0

Você desenha seus círculos em onDraw() . É dessa forma que View deve funcionar (tecnicamente, está no método draw() , mas vamos ignorar isso). Em setPoints() , defina os pontos do círculo em variáveis dentro do escopo de classe, chame invalidate() e desenhe o círculo assim em onDraw() . Se você seguir esse método, estará seguindo o fluxo de classe para o qual a exibição foi projetada.

    
por DeeV 10.02.2012 / 21:08
fonte