Skip to main content

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


Comments

Popular posts from this blog

Wildcards in a hosts file

I want to setup my local development machine so that any requests for *.local are redirected to localhost . The idea is that as I develop multiple sites, I can just add vhosts to Apache called site1.local , site2.local etc, and have them all resolve to localhost , while Apache serves a different site accordingly.