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
Comments
Post a Comment