2011-03-25 20 views
14

क्या किसी को पता है कि छवि दृश्य चेक करने योग्य है या नहीं। मैं अपने प्रोजेक्ट में स्टेट-लिस्ट ड्रॉबल संसाधन का उपयोग करने का प्रयास करता हूं जहां मैं अपने इमेज व्यू चेक स्टेटस के लिए चित्रों को परिभाषित करता हूं, लेकिन ImageView को चेक करने योग्य बनाने के लिए कोई संपत्ति नहीं है, केवल क्लिक करने योग्य है।चेक करने योग्य छवि दृश्य

शायद कोई इस समस्या को हल करने का तरीका जानता है?

उत्तर

11

एक छवि दृश्य देखने योग्य बनाने के बजाय आप एक चेकबॉक्स के लिए पृष्ठभूमि के रूप में एक राज्य सूची को खींचने योग्य सेट कर सकते हैं जो स्वचालित रूप से छवियों को फ़्लिप करेगा।

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checkable="true" android:drawable="@drawable/icon_pressed" /> <!-- pressed --> 
    <item android:state_checked="true" android:drawable="@drawable/icon_focused" /> <!-- focused --> 
    <item android:drawable="@drawable/icon_default" /> <!-- default --> 
</selector> 
+2

हां, यह अच्छी इच्छा है, लेकिन यह दृष्टिकोण मुझे मानक चेकबॉक्स आइकन से छुटकारा पाने की अनुमति नहीं देता है। मुझे पृष्ठभूमि में मेरे आइकन के साथ चेकबॉक्स आइकन मिलता है। – teoREtik

+4

यह ठीक है, मैंने पाया कि इस दोष से कैसे बचें: teoREtik

+1

यह अच्छी तरह से काम करता है सिवाय इसके कि चेकबॉक्स में" एडजस्ट व्यूबाउंड्स "विशेषता नहीं है। इसलिए जब मैं बदलूं एक छवि दृश्य से चेकबॉक्स में, मेरी छवि आकार में विकृत हो जाती है। कोई विचार? – Amplify91

22

उपयोग इस कस्टम imageView कार्यान्वयन (here से लिया गया):

public class CheckableImageView extends ImageView implements Checkable { 
    private boolean mChecked; 

    private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked }; 

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

    @Override 
    public int[] onCreateDrawableState(final int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
     if (isChecked()) 
      mergeDrawableStates(drawableState, CHECKED_STATE_SET); 
     return drawableState; 
    } 

    @Override 
    public void toggle() { 
     setChecked(!mChecked); 
    } 

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

    @Override 
    public void setChecked(final boolean checked) { 
     if (mChecked == checked) 
      return; 
     mChecked = checked; 
     refreshDrawableState(); 
    } 
} 
+0

यूआरएल अब वैध नहीं है :( –

+0

@ किलाका मुझे नहीं लगता कि इसमें बहुत महत्वपूर्ण कोड था। मैं बस चाहता था जो भी इसे करने के लिए क्रेडिट देने के लिए। शायद यह एक समान कोड है (क्षमा करें मुझे याद नहीं है कि यह क्या था): https://github.com/chrisbanes/photup/blob/master/client/src/uk/co/ senab/photup/विचारों/CheckableImageView .java –

+0

CheckableImageView की स्थिति छविदृश्य पर क्लिक करने पर नहीं बदलती है। –

-1

इस मैं अपने अनुप्रयोग में क्या इस्तेमाल किया

public class MainActivity extends Activity implements OnClickListener { 

private boolean paused = false; 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

     switch (v.getId()) { 

      case R.id.imageview_pause: 

       paused = !paused; 

       if (paused) { 

        btn_pause.setBackgroundResource(R.drawable.pause_key_pressed); 

       }else{ 

        btn_pause.setBackgroundResource(R.drawable.pause_key); 
       } 

       break; 
     } 
} 
} 
1

मैं OnClickListener प्रत्यक्ष जांच के लिए Android डेवलपर के कोड से लागू करता है।

public class CheckableImageView extends ImageView implements Checkable, View.OnClickListener { 
    private boolean mChecked; 

    private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked }; 

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

     setOnClickListener(this); 
    } 

    @Override 
    public int[] onCreateDrawableState(final int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
     if (isChecked()) 
      mergeDrawableStates(drawableState, CHECKED_STATE_SET); 
     return drawableState; 
    } 

    @Override 
    public void toggle() { 
     setChecked(!mChecked); 
    } 

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

    @Override 
    public void setChecked(final boolean checked) { 
     if (mChecked == checked) 
      return; 
     mChecked = checked; 
     refreshDrawableState(); 
    } 

    @Override 
    public void onClick(View v) { 
     toggle(); 
    } 
} 
0

यदि आप ImageView पर क्लिक करते समय चेक स्थिति बदलना चाहते हैं, तो कंपाउंडबटन पर "छवि दृश्य देखें" बदलें।

public class CheckableImageView extends CompoundButton { 

    public CheckableImageView(Context context) { 
     super(context); 
    } 

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

    private static final int[] CheckedStateSet = {android.R.attr.state_checked}; 

    public void setChecked(boolean b) { 
     boolean oldState = isChecked(); 
     super.setChecked(b); 
     if (b != oldState) { 
      refreshDrawableState(); 
     } 
    } 

    @Override 
    public int[] onCreateDrawableState(int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
     if (isChecked()) { 
      mergeDrawableStates(drawableState, CheckedStateSet); 
     } 
     return drawableState; 
    } 

    @Override 
    protected void drawableStateChanged() { 
     super.drawableStateChanged(); 
     invalidate(); 
    } 

} 
संबंधित मुद्दे