Autore Topic: problemi con una custom view  (Letto 358 volte)

Offline filosofo

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
problemi con una custom view
« il: 18 Settembre 2013, 17:16:58 CEST »
0
Ciao a tutti.Sto progettando una semplice applicazione android con una custom view in cui vengono disegnati con coordinate a caso punti e linee colorate ecco il codice:
Codice (Java): [Seleziona]
package com.example.pun;

import java.util.Random;

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

public class Finestra extends View {
private Paint p;
private Random r;
private int color;
private int st1;
private int st2;
private int fin1;
private int fin2;
private float x;
private float y;


        public Finestra(Context context) {
                super(context);
                p=new Paint();
                p.setAntiAlias(true);
                r=new Random();
       
               
       
        }

        public Finestra(Context context, AttributeSet attrs) {
                super(context, attrs);
                p=new Paint();
                p.setAntiAlias(true);
                r=new Random();
       
       
        }

        public Finestra(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
                // TODO Auto-generated constructor stub
                p=new Paint();
                p.setAntiAlias(true);
                r=new Random();
               
       
        }
       
         
         protected void onDraw(Canvas d){
                  super.onDraw(d);
                   p.setColor(Color.BLACK);
                   p.setStrokeWidth(2);
                   //generatore di linee
                   
                        for(int i=0;i<250;i++){
                                 color=r.nextInt(5);
                                switch(color){
                                case 1:
                                        p.setColor(Color.RED);
                                        break;
                                case 2:
                                        p.setColor(Color.GREEN);
                                        break;
                                case 3:
                                        p.setColor(Color.BLUE);
                                        break;
                                case 4:
                                        p.setColor(Color.YELLOW);
                                        break;
                                default:
                                        p.setColor(Color.MAGENTA);
                                }
                               
                               
                   
                         st1=r.nextInt(450);
                         st2=r.nextInt(630);
                         fin1=r.nextInt(450);
                         fin2=r.nextInt(630);
                        d.drawCircle(st1, st2, 4, p);
                        d.drawCircle(fin1, fin2,2, p);
                        d.drawLine(st1, st2, fin1, fin2, p);
                        d.drawPoint(x,y,p);
                       
                        }
                       
                       
                       
                       
                        }
         public boolean onTouchEvent(MotionEvent e){
                 x=e.getX();
                 y=e.getY();
                 int ix=(int) x;
                 int iy=(int) y;
             invalidate();
                return true;
                 
         }
        }
       
         
Come sicuramente avrete notato ho inserito un evento nella view in cui ogni volta che l' utente tocca la view viene disegnato un punto di coordinate x e y. Il mio problema e' che ogni volta che l' evento sopraindicato e' in attivato riesegue tutto il codice del metodo onDraw() e quindi ogni volta le linee e i punti della view cambiano e io voglio che devono essere fisse.Come posso ovviare a questo problema?Grz in anticipo.

Offline minomic

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +2
    • Mostra profilo
Re:problemi con una custom view
« Risposta #1 il: 24 Settembre 2013, 11:37:04 CEST »
0
Il codice del metodo onDraw viene eseguito ogni volta che richiami invalidate(). Prova a fare una cosa del genere: ti crei una qualche struttura (es. una Lista) per memorizzare i punti e poi nel metodo onDraw vai semplicemente a ripescare questi punti e a fare i disegni necessari. Una specie di memorizzazione di quello che è già stato disegnato.