DeadZonepublic class DeadZone extends android.view.View
Fields Summary |
---|
public static final String | TAG | public static final boolean | DEBUG | public static final int | HORIZONTAL | public static final int | VERTICAL | private static final boolean | CHATTY | private boolean | mShouldFlash | private float | mFlashFrac | private int | mSizeMax | private int | mSizeMin | private int | mHold | private int | mDecay | private boolean | mVertical | private long | mLastPokeTime | private final Runnable | mDebugFlash |
Constructors Summary |
---|
public DeadZone(android.content.Context context, android.util.AttributeSet attrs)
this(context, attrs, 0);
| public DeadZone(android.content.Context context, android.util.AttributeSet attrs, int defStyle)
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DeadZone,
defStyle, 0);
mHold = a.getInteger(R.styleable.DeadZone_holdTime, 0);
mDecay = a.getInteger(R.styleable.DeadZone_decayTime, 0);
mSizeMin = a.getDimensionPixelSize(R.styleable.DeadZone_minSize, 0);
mSizeMax = a.getDimensionPixelSize(R.styleable.DeadZone_maxSize, 0);
int index = a.getInt(R.styleable.DeadZone_orientation, -1);
mVertical = (index == VERTICAL);
if (DEBUG)
Slog.v(TAG, this + " size=[" + mSizeMin + "-" + mSizeMax + "] hold=" + mHold
+ (mVertical ? " vertical" : " horizontal"));
setFlashOnTouchCapture(context.getResources().getBoolean(R.bool.config_dead_zone_flash));
|
Methods Summary |
---|
public float | getFlash()
return mFlashFrac;
| private float | getSize(long now)
if (mSizeMax == 0)
return 0;
long dt = (now - mLastPokeTime);
if (dt > mHold + mDecay)
return mSizeMin;
if (dt < mHold)
return mSizeMax;
return (int) lerp(mSizeMax, mSizeMin, (float) (dt - mHold) / mDecay);
| static float | lerp(float a, float b, float f)
return (b - a) * f + a;
| public void | onDraw(android.graphics.Canvas can)
if (!mShouldFlash || mFlashFrac <= 0f) {
return;
}
final int size = (int) getSize(SystemClock.uptimeMillis());
can.clipRect(0, 0, mVertical ? size : can.getWidth(), mVertical ? can.getHeight() : size);
final float frac = DEBUG ? (mFlashFrac - 0.5f) + 0.5f : mFlashFrac;
can.drawARGB((int) (frac * 0xFF), 0xDD, 0xEE, 0xAA);
if (DEBUG && size > mSizeMin)
// crazy aggressive redrawing here, for debugging only
postInvalidateDelayed(100);
| public boolean | onTouchEvent(android.view.MotionEvent event)
if (DEBUG) {
Slog.v(TAG, this + " onTouch: " + MotionEvent.actionToString(event.getAction()));
}
final int action = event.getAction();
if (action == MotionEvent.ACTION_OUTSIDE) {
poke(event);
} else if (action == MotionEvent.ACTION_DOWN) {
if (DEBUG) {
Slog.v(TAG, this + " ACTION_DOWN: " + event.getX() + "," + event.getY());
}
int size = (int) getSize(event.getEventTime());
if ((mVertical && event.getX() < size) || event.getY() < size) {
if (CHATTY) {
Slog.v(TAG, "consuming errant click: (" + event.getX() + "," + event.getY() + ")");
}
if (mShouldFlash) {
post(mDebugFlash);
postInvalidate();
}
return true; // ...but I eated it
}
}
return false;
| public void | poke(android.view.MotionEvent event)
mLastPokeTime = event.getEventTime();
if (DEBUG)
Slog.v(TAG, "poked! size=" + getSize(mLastPokeTime));
if (mShouldFlash) postInvalidate();
| public void | setFlash(float f)
mFlashFrac = f;
postInvalidate();
| public void | setFlashOnTouchCapture(boolean dbg)
mShouldFlash = dbg;
mFlashFrac = 0f;
postInvalidate();
|
|