Tuesday, January 17, 2012

Android ImageView onClickListener won"t work


I am using a View Object named CameraView that implements View and uses a Hud-Object to create the HUD for a game. In this Hud-Class i use a LinearLayout to place ImageViews. I want these ImageViews to be clickable and to be able to fire some Code on Click. Thats why I use the onClickListener for each of the ImageViews. But it won't work at all.



Here is the specific Code of both classes:



CameraView




protected void onDraw(Canvas canvas) {
//GameTimer
hud.draw(canvas);

// and make sure to redraw asap
invalidate();
}



HUD




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;

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()) {

ImageView imgView = new ImageView(mCameraView.getContext());
imgView.setImageBitmap(item.getImage());

//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);

imgView.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

Log.d("ITEM", "PRESSED");
}
});

//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);

}


}



The Method HUD.updateItems() gets called by another class. i am certain of that, because i can see the item images, but i cant press them.



I hope anybody of you can help me with this. Thanks in advance.



CvD

No comments:

Post a Comment