CustomImageView + GridView + onItemClick

U

Unicate

Erfahrenes Mitglied
57
Hallo alle zusammen!

Ich habe eine CustomView sie heisst CheckableImageView:
PHP:
package de.mms.anti.android.redbull.customviews;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Checkable;
import android.widget.ImageView;
import de.mms.anti.android.redbull.R;

public class CheckableImageView extends ImageView implements Checkable {

    
    private boolean _checked = false;
    private boolean _enabled = true;
    private Bitmap _bitmapChecked;
    private Bitmap _bitmapUnchecked;
    private OnCheckedChangeListener _listener;
    
    public CheckableImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public CheckableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CheckableImageView(Context context) {
        super(context);
        init();
    }
    
    public void init() {
        _bitmapChecked = BitmapFactory.decodeResource(getResources(), R.drawable.field_checked);
        _bitmapUnchecked = BitmapFactory.decodeResource(getResources(), R.drawable.field_emtpy); 
    }
    
    
    
    public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
        _listener = listener;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if(_enabled) {
            Bitmap bitmap = (_checked)?_bitmapChecked:_bitmapUnchecked;
            canvas.drawBitmap(bitmap, 5,5,new Paint());
        }
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(_enabled && event.getAction() == MotionEvent.ACTION_UP) {
            toggle();
            invalidate();
        }
        return super.onTouchEvent(event);
    }
    

    @Override
    public boolean isChecked() {
        return _checked;
    }

    @Override
    public void setChecked(boolean checked) {
        if(_checked != checked && null != _listener) {
            _checked = checked;
            _listener.onCheckedChanged(this, checked);
        } else {
            _checked = checked;
        }
    }


    @Override
    public void toggle() {
        _checked = !_checked;
        if(null != _listener)
            _listener.onCheckedChanged(this, _checked);
    }
    
    @Override
    public void setEnabled(boolean enabled) {
        _enabled = enabled;
        super.setEnabled(enabled);
    }

}
Diese lade ich in eine GridView.

Wenn ich der GridView nun einen onItemClickListener gebe, dann wird dieser nicht aufgerufen.
Wenn ich aber das CheckableImageView auf disabled setze (und somit keine checkbox mehr reinmale), dann funktioniert es.

Was mach ich falsch, bzw. wie bekomme ich meine View dazu auch auf onItemClick zu reagieren?
 
Hi,

eine ImageView hat m.E. einen OnClickListener vorinstalliert - ergo müsstest Du das onClick(View) in deiner ImageView implementieren ... glaub ich zumindest ;)
 
Dacht ich auch! Aber die ImageView hat keine onClick Methode zum überschreiben
 
Sorry, ich "dachte" :unsure:

Und wenn Deine CheckableImageView einen OnClickListener implementiert und nicht die Checkable class?
Sollte doch damit gehen - spätestens dort kannst Du ja dann das onClick(View v) implementieren und in Deiner Klasse einen "checked" Status setzen und diesen anzeigen. checked nimmst Du als boolschen Wert, den kannst Du dann ja verarbeiten (toggle,isChecked, etc) und als Image/Canvas anzeigen lassen.
 

Ähnliche Themen

kukuk
Antworten
2
Aufrufe
829
kukuk
kukuk
T
Antworten
0
Aufrufe
521
tim1602
T
H
Antworten
7
Aufrufe
1.423
Heribert500
H
Zurück
Oben Unten