mirror of https://github.com/tasks/tasks
Fixed animations and placement of checkboxes by introducing a checkable image view (checkbox without text)
parent
a3b46dec31
commit
ea580ffe15
@ -0,0 +1,98 @@
|
||||
package com.todoroo.astrid.ui;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.ViewDebug;
|
||||
import android.widget.Checkable;
|
||||
import android.widget.ImageView;
|
||||
|
||||
public class CheckableImageView extends ImageView implements Checkable {
|
||||
|
||||
private static final int[] CHECKED_STATE_SET = {
|
||||
android.R.attr.state_checked
|
||||
};
|
||||
|
||||
public CheckableImageView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public static interface OnCheckedChangeListener {
|
||||
public void onCheckedChanged(Checkable c, boolean isChecked);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean performClick() {
|
||||
toggle();
|
||||
return super.performClick();
|
||||
}
|
||||
|
||||
private boolean mChecked;
|
||||
private boolean mBroadcasting;
|
||||
private OnCheckedChangeListener mOnCheckedChangeListener;
|
||||
|
||||
public void toggle() {
|
||||
setChecked(!mChecked);
|
||||
}
|
||||
|
||||
@ViewDebug.ExportedProperty
|
||||
public boolean isChecked() {
|
||||
return mChecked;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Changes the checked state of this button.</p>
|
||||
*
|
||||
* @param checked true to check the button, false to uncheck it
|
||||
*/
|
||||
public void setChecked(boolean checked) {
|
||||
if (mChecked != checked) {
|
||||
mChecked = checked;
|
||||
refreshDrawableState();
|
||||
|
||||
// Avoid infinite recursions if setChecked() is called from a listener
|
||||
if (mBroadcasting) {
|
||||
return;
|
||||
}
|
||||
|
||||
mBroadcasting = true;
|
||||
if (mOnCheckedChangeListener != null) {
|
||||
mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
|
||||
}
|
||||
|
||||
mBroadcasting = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a callback to be invoked when the checked state of this button
|
||||
* changes.
|
||||
*
|
||||
* @param listener the callback to call on checked state change
|
||||
*/
|
||||
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
|
||||
mOnCheckedChangeListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] onCreateDrawableState(int extraSpace) {
|
||||
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
|
||||
if (isChecked()) {
|
||||
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
|
||||
}
|
||||
return drawableState;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawableStateChanged() {
|
||||
super.drawableStateChanged();
|
||||
|
||||
if (getDrawable() != null) {
|
||||
int[] myDrawableState = getDrawableState();
|
||||
|
||||
// Set the state of the Drawable
|
||||
getDrawable().setState(myDrawableState);
|
||||
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue