OnClick Listener auf einem ImageView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • OnClick Listener auf einem ImageView

    Hallo Forum,

    ich bin neu hier und hoffe meine Frage in der richtigen Kategorie gestellt zu haben.
    Ich habe Eine Klasse CameraView, welche View implementiert. Mittels der onDraw Methode zeichne ich alle Objekte auf dem Canvas. Innerhalb der OnDraw Methode rufe ich eine OnDraw Methode einer eigenen Klasse HUD auf. Diese malt ein kleines HUD für ein Spiel. Das Zeichnen an sich funktinoiert auch prima, allerdings funktionieren die ActionListener der ImageViews der Klasse HUD nicht. Ich habe keine Ahnung woran das liegen könnte. Hier mal die Codeschnippsel der entsprechenden Klassen:

    Java-Quellcode

    1. public class CameraView extends View implements SensorEventListener{
    2. .....
    3. .....
    4. @Override
    5. protected void onDraw(Canvas canvas) {
    6. mCanvas = canvas;
    7. //update GameTimer and Items
    8. hud.updateGameTimer();
    9. //draw level based on camera coordinates
    10. canvas.drawBitmap(background, camX, camY, null);
    11. //Draw the HUD
    12. hud.draw(canvas);
    13. // and make sure to redraw asap
    14. invalidate();
    15. }
    16. }
    Alles anzeigen


    Java-Quellcode

    1. public class Hud{
    2. public TextElement gameTimer;
    3. CameraView mCameraView;
    4. private HashMap<Integer, Item> mItems = new HashMap<Integer, Item>();
    5. private Integer mScreenWidth;
    6. private Integer mScreenHeight;
    7. //private ImageView imgView;
    8. private HashMap<Integer, ImageView> imgViews = new HashMap<Integer, ImageView>();
    9. private LinearLayout ll;
    10. private Integer n;
    11. public Hud(CameraView cameraView){
    12. mCameraView = cameraView;
    13. mScreenWidth = mCameraView.screenWidth;
    14. mScreenHeight = mCameraView.screenHeight;
    15. //Get an instance of the GameTimer
    16. gameTimer = new TextElement("GameTimer", mScreenWidth/2, 25);
    17. //imgView = new ImageView(mCameraView.getContext());
    18. //We use a layout to contain the buttons (or any view)
    19. ll = new LinearLayout(mCameraView.getContext());
    20. ll.setOrientation(LinearLayout.HORIZONTAL);
    21. }
    22. public void updateGameTimer() {
    23. //update GameTimer
    24. long millis = System.currentTimeMillis() - mCameraView.startTime ;
    25. int seconds = (int) (millis / 1000);
    26. int minutes = seconds / 60;
    27. seconds = seconds % 60;
    28. gameTimer.setText(String.format("%d: %02d", minutes, seconds));
    29. }
    30. public void updateItems() {
    31. mItems = Simulation.items;
    32. ll = new LinearLayout(mCameraView.getContext());
    33. for (Item item : mItems.values()) {
    34. Integer id = item.getIdentifier();
    35. ImageView imgView = new ImageView(mCameraView.getContext());
    36. imgView.setImageBitmap(item.getImage());
    37. imgView.setId(id);
    38. //We set the layout parameters
    39. LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
    40. LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    41. //SET THE MARGIN HERE
    42. layoutParams.setMargins(30 , mScreenHeight - item.getImage().getHeight() - 20, 0, 0);
    43. ImageView.OnClickListener listener = new ImageView.OnClickListener()
    44. {
    45. public void onClick(View v)
    46. {
    47. Simulation.items.get(v.getId()).useItem();
    48. Simulation.items.remove(v.getId());
    49. imgViews.remove(v.getId());
    50. updateItems();
    51. }
    52. };
    53. imgView.setOnClickListener(listener);
    54. //Add it to our linear layout
    55. ll.addView(imgView, layoutParams);
    56. //Measure and layout the linear layout before drawing it
    57. ll.measure(MeasureSpec.getSize(ll.getMeasuredWidth()), MeasureSpec.getSize(ll.getMeasuredHeight()));
    58. ll.layout(0, 0, MeasureSpec.getSize(imgView.getMeasuredWidth()), MeasureSpec.getSize(imgView.getMeasuredHeight()));
    59. imgViews.put(item.getIdentifier(), imgView);
    60. }
    61. }
    62. public void draw(Canvas canvas) {
    63. //GameTimer
    64. gameTimer.Draw(canvas);
    65. //Finally draw the linear layout on the canvas
    66. ll.draw(canvas);
    67. if (imgViews.containsKey(1)) {
    68. //imgViews.get(1).performClick();
    69. }
    70. }
    71. }
    Alles anzeigen


    Wenn ich auf die angezeigten ItemBilder clicke passiert nichts. Lasse ich jedoch das Programm auf eines der Icons klicken (mittels imgViews.get(1).performClick();) wird zumindest mal die korrekte Aktion ausgeführt. Die Listener scheinen also zu gehen. Aber irgendwie "dringt" der Klick nicht zu dem ImageView durch :-/

    Ich hoffe ihr könnte mir helfen!

    Vielen Dank schonmal!
    MfG, der CvD