zoukankan      html  css  js  c++  java
  • Android UI开发第二十三篇——分享书架UI实现

             android中有很多的电子书阅读应用,应用中都仿真了书架的实现,这里也分享一篇读书应用的书架实现: 

     java:

    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();
                }
            }
        }
    }
    

        

           


    代码:http://download.csdn.net/detail/xyz_lmn/4698124


    /**
    * @author 张兴业
    * 邮箱:xy-zhang#163.com
    * android开发进阶群:278401545
    *
    */


  • 相关阅读:
    C# 文件重命名
    C# 获取图像文件
    我开通了博客
    C# 图像截取
    C# 从txt读取内容
    Linux 下查看用户组信息
    部署Jenkins完整记录
    一篇文章搞定Java注解^_^
    Java基础之接口
    枚举让盗版美国总统wcc给你整明白哈哈
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168082.html
Copyright © 2011-2022 走看看