您的位置:首页 > 产品设计 > UI/UE

分享--> 书架UI实现

2015-06-10 14:58 627 查看
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();

}

}

}

}



以作收藏。
特别感谢
xyz_lmn 分享 。
代码:http://download.csdn.net/detail/xyz_lmn/4698124
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: