wolfgang146 Δημοσ. 30 Οκτωβρίου 2012 Δημοσ. 30 Οκτωβρίου 2012 Καλησπέρα παιδιά. Ξέρει κανείς πως μπορεί κάποιος να ζωγραφίσει κύκλους σε ένα imageView, στα σημεία που άγγιξε ο χρήστης στην οθόνη; Αυτό που έχω καταφέρει μέχρι στιγμής είναι να υπάρχει ένας κύκλος στην οθόνη, ενώ χρειάζομαι πολλούς ( ας πούμε 6). Απ ότι καταλαβαίνω πρέπει να αποθηκεύω κάπου το σημείο επαφής του χρήστη και στη συνέχεια με τη χρήση ενός loop να ξαναζωγραφίζω κάθε κύκλο από την αρχή κάθε φορά που αγγίζει την οθόνη. Απλά δεν ξέρω πως. Καμιά ιδέα; Κάποιος άλλος τρόπος μήπως; Κάθε βοήθεια ευπρόσδεκτη
Directx Δημοσ. 30 Οκτωβρίου 2012 Δημοσ. 30 Οκτωβρίου 2012 Καταρχήν να διαβάσεις το 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 ή άλλες αβλεψίες (είναι εντελώς ενδεικτικός δεν λαμβάνει υπόψη διάφορα πράγματα -προς χάριν απλότητας). Καλή συνέχεια!! 1
wolfgang146 Δημοσ. 31 Οκτωβρίου 2012 Μέλος Δημοσ. 31 Οκτωβρίου 2012 OK! Δεν νομίζω πως χρειάζομαι κάτι παραπάνω. Ευχαριστώ πάρα πολύ και τους 2
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα