分享书架UI实现
2013年09月07日
⁄ 综合
⁄ 共 3810字 ⁄ 字号
小 中 大
-
public class ShelvesView extends GridView {
-
private Bitmap mShelfBackground;
-
private int mShelfWidth;
-
private int mShelfHeight;
-
-
private Bitmap mWebLeft;
-
private Bitmap mWebRight;
-
private int mWebRightWidth;
-
-
public ShelvesView(Context context) {
-
super(context);
-
init(context);
-
}
-
-
public ShelvesView(Context context, AttributeSet attrs) {
-
super(context, attrs);
-
load(context, attrs, 0);
-
init(context);
-
}
-
-
public ShelvesView(Context context, AttributeSet attrs, int defStyle) {
-
super(context, attrs, defStyle);
-
load(context, attrs, defStyle);
-
init(context);
-
}
-
-
private void load(Context context, AttributeSet attrs, int defStyle) {
-
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ShelvesView, defStyle, 0);
-
-
final Resources resources = getResources();
-
final int background = a.getResourceId(R.styleable.ShelvesView_shelfBackground, 0);
-
final Bitmap shelfBackground = BitmapFactory.decodeResource(resources, background);
-
if (shelfBackground != null) {
-
mShelfWidth = shelfBackground.getWidth();
-
mShelfHeight = shelfBackground.getHeight();
-
mShelfBackground = shelfBackground;
-
}
-
-
mWebLeft = BitmapFactory.decodeResource(resources, R.drawable.web_left);
-
-
final Bitmap webRight = BitmapFactory.decodeResource(resources, R.drawable.web_right);
-
mWebRightWidth = webRight.getWidth();
-
mWebRight = webRight;
-
-
a.recycle();
-
}
-
-
private void init(Context context) {
-
StateListDrawable drawable = new StateListDrawable();
-
-
SpotlightDrawable start = new SpotlightDrawable(context, this);
-
start.disableOffset();
-
SpotlightDrawable end = new SpotlightDrawable(context, this, R.drawable.spotlight_blue);
-
end.disableOffset();
-
TransitionDrawable transition = new TransitionDrawable(start, end);
-
drawable.addState(new int[] { android.R.attr.state_pressed },
-
transition);
-
-
final SpotlightDrawable normal = new SpotlightDrawable(context, this);
-
drawable.addState(new int[] { }, normal);
-
-
normal.setParent(drawable);
-
transition.setParent(drawable);
-
-
setSelector(drawable);
-
setDrawSelectorOnTop(false);
-
}
-
-
@Override
-
protected void dispatchDraw(Canvas canvas) {
-
final int count = getChildCount();
-
final int top = count > 0 ? getChildAt(0).getTop() : 0;
-
final int shelfWidth = mShelfWidth;
-
final int shelfHeight = mShelfHeight;
-
final int width = getWidth();
-
final int height = getHeight();
-
final Bitmap background = mShelfBackground;
-
-
for (int x = 0; x < width; x += shelfWidth) {
-
for (int y = top; y < height; y += shelfHeight) {
-
canvas.drawBitmap(background, x, y, null);
-
}
-
}
-
-
if (count == 0) {
-
canvas.drawBitmap(mWebLeft, 0.0f, top + 1, null);
-
canvas.drawBitmap(mWebRight, width - mWebRightWidth, top + shelfHeight + 1, null);
-
}
-
-
super.dispatchDraw(canvas);
-
}
-
-
-
-
@Override
-
public void setPressed(boolean pressed) {
-
super.setPressed(pressed);
-
-
final Drawable current = getSelector().getCurrent();
-
if (current instanceof TransitionDrawable) {
-
if (pressed) {
-
((TransitionDrawable) current).startTransition(
-
ViewConfiguration.getLongPressTimeout());
-
} else {
-
((TransitionDrawable) current).resetTransition();
-
}
-
}