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:
public class CameraView extends View implements SensorEventListener{
.....
.....
@Override
protected void onDraw(Canvas canvas) {
mCanvas = canvas;
//update GameTimer and Items
hud.updateGameTimer();
//draw level based on camera coordinates
canvas.drawBitmap(background, camX, camY, null);
//Draw the HUD
hud.draw(canvas);
// and make sure to redraw asap
invalidate();
}
}
Alles anzeigen
public class Hud{
public TextElement gameTimer;
CameraView mCameraView;
private HashMap<Integer, Item> mItems = new HashMap<Integer, Item>();
private Integer mScreenWidth;
private Integer mScreenHeight;
//private ImageView imgView;
private HashMap<Integer, ImageView> imgViews = new HashMap<Integer, ImageView>();
private LinearLayout ll;
private Integer n;
public Hud(CameraView cameraView){
mCameraView = cameraView;
mScreenWidth = mCameraView.screenWidth;
mScreenHeight = mCameraView.screenHeight;
//Get an instance of the GameTimer
gameTimer = new TextElement("GameTimer", mScreenWidth/2, 25);
//imgView = new ImageView(mCameraView.getContext());
//We use a layout to contain the buttons (or any view)
ll = new LinearLayout(mCameraView.getContext());
ll.setOrientation(LinearLayout.HORIZONTAL);
}
public void updateGameTimer() {
//update GameTimer
long millis = System.currentTimeMillis() - mCameraView.startTime ;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
gameTimer.setText(String.format("%d: %02d", minutes, seconds));
}
public void updateItems() {
mItems = Simulation.items;
ll = new LinearLayout(mCameraView.getContext());
for (Item item : mItems.values()) {
Integer id = item.getIdentifier();
ImageView imgView = new ImageView(mCameraView.getContext());
imgView.setImageBitmap(item.getImage());
imgView.setId(id);
//We set the layout parameters
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//SET THE MARGIN HERE
layoutParams.setMargins(30 , mScreenHeight - item.getImage().getHeight() - 20, 0, 0);
ImageView.OnClickListener listener = new ImageView.OnClickListener()
{
public void onClick(View v)
{
Simulation.items.get(v.getId()).useItem();
Simulation.items.remove(v.getId());
imgViews.remove(v.getId());
updateItems();
}
};
imgView.setOnClickListener(listener);
//Add it to our linear layout
ll.addView(imgView, layoutParams);
//Measure and layout the linear layout before drawing it
ll.measure(MeasureSpec.getSize(ll.getMeasuredWidth()), MeasureSpec.getSize(ll.getMeasuredHeight()));
ll.layout(0, 0, MeasureSpec.getSize(imgView.getMeasuredWidth()), MeasureSpec.getSize(imgView.getMeasuredHeight()));
imgViews.put(item.getIdentifier(), imgView);
}
}
public void draw(Canvas canvas) {
//GameTimer
gameTimer.Draw(canvas);
//Finally draw the linear layout on the canvas
ll.draw(canvas);
if (imgViews.containsKey(1)) {
//imgViews.get(1).performClick();
}
}
}
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