Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα παιδιά. Ξέρει κανείς πως μπορεί κάποιος να ζωγραφίσει κύκλους σε ένα imageView, στα σημεία που άγγιξε ο χρήστης στην οθόνη;

 

Αυτό που έχω καταφέρει μέχρι στιγμής είναι να υπάρχει ένας κύκλος στην οθόνη, ενώ χρειάζομαι πολλούς ( ας πούμε 6).

 

Απ ότι καταλαβαίνω πρέπει να αποθηκεύω κάπου το σημείο επαφής του χρήστη και στη συνέχεια με τη χρήση ενός loop να ξαναζωγραφίζω κάθε κύκλο από την αρχή κάθε φορά που αγγίζει την οθόνη. Απλά δεν ξέρω πως.

 

Καμιά ιδέα; Κάποιος άλλος τρόπος μήπως; Κάθε βοήθεια ευπρόσδεκτη :)

Δημοσ.

Καταρχήν να διαβάσεις το link που παραθέτει ο nilosgr, από εκεί και πέρα τυπικά χρειάζεσαι 3 πράγματα. Ένα Bitmap πάνω στο οποίο θα σχεδιάζεις, ένα Canvas το οποίο μας επιτρέπει να σχεδιάζουμε σχήματα (κ.α.) στο Bitmap μας και ένα Paint με το οποίο θα ορίσεις το στιλ σχεδίασης των κύκλων σου. Ύστερα πρέπει να ορίσεις ένα TouchListener ώστε να λαμβάνεις ενημέρωση (MotionEvent) για την θέση που πάτησε ο χρήστης (TOUCH_DOWN) και εκεί να σχεδιάσεις τον κύκλο σου. Τέλος θα πρέπει να ορίσεις με ακρίβεια το μέγεθος του ImageView σου ώστε να συμπίπτει με εκείνο του Bitmap σου (για να μην έχεις αστοχίες λόγο scaling).

 

Για παράδειγμα ο παρακάτω κώδικας σχεδιάζει κίτρινους κύκλους σε μπλε φόντο:

 

 

>
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.ImageView;

public class TouchdrawActivity extends Activity {

   ImageView imgView;    

   Bitmap bmpSurface;
   Canvas canSurface;
   Paint  pntCircle;

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       /* Switch to full screen */
       requestWindowFeature(window.FEATURE_NO_TITLE);
       getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
               WindowManager.LayoutParams.FLAG_FULLSCREEN);

       setContentView(R.layout.main);

       imgView = (ImageView)findViewById(R.id.imageView1);

       /* The Bitmap (surface) were to store my drawing */
       bmpSurface = Bitmap.createBitmap(320, 480, Config.ARGB_8888);
       bmpSurface.eraseColor(Color.BLUE);

       /* The Canvas to draw on (Bitmap) */
       canSurface = new Canvas(bmpSurface);

       /* The Paint to use while drawing */
       pntCircle = new Paint();
       pntCircle.setColor(Color.YELLOW);

       /* Assign Bitmap to ImageView */
       imgView.setImageBitmap(bmpSurface);

       imgView.setOnTouchListener(new OnTouchListener() {        

           @Override
           public boolean onTouch(View v, MotionEvent event) {                                                    

               /* !Draw only during initial touch down! */
               switch(event.getActionMasked())
               {
               case MotionEvent.ACTION_DOWN:
                   /* Draw! & Update.. */
                   canSurface.drawCircle(event.getX(), event.getY(), 20, pntCircle);                        

                   imgView.setImageBitmap(bmpSurface);                        
                   return true;

                   default:
                       return false;
               }                
           }
       });
   }
}

 

main.xml:

>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

   <ImageView
       android:id="@+id/imageView1"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:src="@drawable/ic_launcher" android:adjustViewBounds="true"/>

</LinearLayout>

 

* Ο κώδικας είναι δοκιμασμένος στον εξομοιωτή του Android 2.2 και μπορεί να περιέχει bugs ή άλλες αβλεψίες (είναι εντελώς ενδεικτικός δεν λαμβάνει υπόψη διάφορα πράγματα -προς χάριν απλότητας).

 

post-41640-0-18543500-1351632213_thumb.png

 

 

Καλή συνέχεια!!

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...