Autore Topic: Disegno cerchio dinamico  (Letto 1470 volte)

Offline GregWildfire

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Wildfire
  • Sistema operativo:
    Windows XP
Disegno cerchio dinamico
« il: 21 Dicembre 2011, 16:11:59 CET »
0
Ciao,
sono nuovo,
mi chiamo Gregorio e sono possessore di un HTC Wildfire quindi sviluppo per android 2.2

Sono ancora agli inizi e adesso stavo cercando di costruirmi una classe per disegnare oggetti come cerchi, linee, ecc.

Il codice che 'ho' scritto (o meglio preso da un sito) mi permette di disegnare vari oggetti quando l'applicazione si apre, ma io vorrei che quando tocco lo schermo nel punto in cui lo si tocca viene disegnato un cerchio. Ho creato il metodo per disegnare il cerchio e quello per vedere quando viene toccato lo schermo e in che punto ma non riesco proprio a "collegare" i due metodi.. ecco il codice che ho scritto fin'ora:

Codice (Java): [Seleziona]
package greg.ClassGraphics;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.*;
import android.widget.*;

public class ClassGraphicsActivity extends Activity {
    /** Called when the activity is first created. */
        DemoView dv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        dv = new DemoView(this);
        setContentView(dv);
       
               
    }
   
 
     
    private class DemoView extends View{
                public DemoView(Context context){
                        super(context);
                }
float xm = 1;
float ym = 1;
Canvas cv;
Paint pnt;
private void Cerchio(Canvas canvas, Paint paint, float cx, float cy, float raggio) {
        // draw a solid blue circle
        paint.setColor(Color.BLUE);
        canvas.drawCircle(cx, cy, 15, paint);
}


                @Override
                public boolean onTouchEvent (MotionEvent m) {
                        xm = m.getX();
                        ym = m.getY();
                        Cerchio(cv, pnt, xm,ym,10);
                       
                        return true;
                }


                @Override protected void onDraw(Canvas canvas) {
                        super.onDraw(canvas);
                        cv = canvas;
                        // custom drawing code here
                        // remember: y increases from top to bottom
                        // x increases from left to right
                        int x = 0;
                        int y = 0;
                        Paint paint = new Paint();
                        paint.setStyle(Paint.Style.FILL);
                        pnt = paint;

//Il codice sotto non mi serve, o meglio disegna altre cose, ma al momento mi sono fissato riguardo il cerchio però lo lascio
//potrebbe servire da spunto ad altri

                        // make the entire canvas white
                        paint.setColor(Color.WHITE);
                        canvas.drawPaint(paint);
                        // another way to do this is to use:
                        // canvas.drawColor(Color.WHITE);
                        Cerchio(canvas, paint, 20,20,15);


                        // draw blue circle with antialiasing turned on
                        paint.setAntiAlias(true);
                        paint.setColor(Color.BLUE);
                        canvas.drawCircle(60, 20, 15, paint);

                        // compare the above circles once drawn
                        // the fist circle has a jagged perimeter
                        // the second circle has a smooth perimeter

                        // draw a solid green rectangle
                        paint.setAntiAlias(false);
                        paint.setColor(Color.GREEN);
                        canvas.drawRect(100, 5, 200, 30, paint);

                        // create and draw triangles
                        // use a Path object to store the 3 line segments
                        // use .offset to draw in many locations
                        // note: this triangle is not centered at 0,0
                        paint.setStyle(Paint.Style.STROKE);
                        paint.setStrokeWidth(2);
                        paint.setColor(Color.RED);
                        Path path = new Path();
                        path.moveTo(0, -10);
                        path.lineTo(5, 0);
                        path.lineTo(-5, 0);
                        path.close();
                        path.offset(10, 40);
                        canvas.drawPath(path, paint);
                        path.offset(50, 100);
                        canvas.drawPath(path, paint);
                        // offset is cumlative
                        // next draw displaces 50,100 from previous
                        path.offset(50, 100);
                        canvas.drawPath(path, paint);

                        // draw some text using STROKE style
                        paint.setStyle(Paint.Style.STROKE);
                        paint.setStrokeWidth(1);
                        paint.setColor(Color.MAGENTA);
                        paint.setTextSize(30);
                        canvas.drawText("Style.STROKE", 75, 75, paint);

                        // draw some text using FILL style
                        paint.setStyle(Paint.Style.FILL);
                        //turn antialiasing on
                        paint.setAntiAlias(true);
                        paint.setTextSize(30);
                        canvas.drawText("Style.FILL", 75, 110, paint);

                        // draw some rotated text
                        // get text width and height
                        // set desired drawing location
                        x = 75;
                        y = 185;
                        paint.setColor(Color.GRAY);
                        paint.setTextSize(25);
                        String str2rotate = "Rotated!";

                        // draw bounding rect before rotating text
                        Rect rect = new Rect();
                        paint.getTextBounds(str2rotate, 0, str2rotate.length(), rect);
                        canvas.translate(x, y);
                        paint.setStyle(Paint.Style.FILL);
                        // draw unrotated text
                        canvas.drawText("!Rotated", 0, 0, paint);
                        paint.setStyle(Paint.Style.STROKE);
                        canvas.drawRect(rect, paint);
                        // undo the translate
                        canvas.translate(-x, -y);

                        // rotate the canvas on center of the text to draw
                        canvas.rotate(-45, x + rect.exactCenterX(),
                                               y + rect.exactCenterY());
                        // draw the rotated text
                        paint.setStyle(Paint.Style.FILL);
                        canvas.drawText(str2rotate, x, y, paint);

                        //undo the rotate
                        canvas.restore();
                        canvas.drawText("After canvas.restore()", 50, 250, paint);

                        // draw a thick dashed line
                        DashPathEffect dashPath =
                            new DashPathEffect(new float[]{20,5}, 1);
                        paint.setPathEffect(dashPath);
                        paint.setStrokeWidth(8);
                        canvas.drawLine(0, 300 , 320, 300, paint);

                }
               
       
               
        }
   
   
   
   
}
« Ultima modifica: 21 Dicembre 2011, 21:42:15 CET da GregWildfire »

Offline GregWildfire

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Wildfire
  • Sistema operativo:
    Windows XP
Re:Disegno cerchio dinamico
« Risposta #1 il: 21 Dicembre 2011, 18:49:35 CET »
0
ok, ho risolto semplicemente mettendo nell'evento onTouchEvent:

Codice (Java): [Seleziona]
                        xm = m.getX();
                        ym = m.getY();
                        setContentView(dv);

e ho portato fuori dalla classe DemoView xm e ym facendole diventare variabili pubbliche