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

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.