`
xyz_lmn
  • 浏览: 65373 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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 张兴业
* iOS入门群:83702688
* android开发进阶群:241395671
* 我的新浪微博:@张兴业TBOW
*/


分享到:
评论

相关推荐

    UI开发第六篇——仿QQ的滑动Tab

    在现代Android开发中,更推荐使用`ViewPager`结合`TabLayout`(来自`androidx.appcompat.widget`库)或者`BottomNavigationView`(来自`androidx.navigation.ui`库)来实现滑动Tab效果。这两种方法更稳定,且有更好...

    Android UI开发第二十一篇——下拉刷新列表实现(pull to refresh)

    在Android应用开发中,下拉刷新(Pull To Refresh)功能是一项常见的UI交互设计,它允许用户通过在列表顶部向下拉动来触发数据的刷新操作。这一功能显著提升了用户体验,尤其是在查看实时信息更新时,如新闻、社交...

    Android UI开发第十六篇——分享一个popuwindow实例

    在Android应用开发中,UI设计是至关重要的组成部分,而PopupWindow则是实现丰富交互效果的一种工具。本篇文章将深入探讨如何在Android中使用PopupWindow,并通过一个具体的实例来讲解其用法。 PopupWindow是Android...

    UI开发第八篇——ViewFlipper 左右滑动效果

    在Android UI开发中,实现界面元素的动态交互是提升用户体验的关键之一。本篇将深入探讨如何利用ViewFlipper组件和GestureDetector类实现左右滑动切换视图的效果,这在主页面或多个内容区域展示的场景中非常常见。 ...

    安卓Android源码——ui开发类库示例源码.zip

    9. **Third-party UI库**:除了官方组件,还有很多第三方库增强了Android的UI开发能力,如Butter Knife(视图注入)、Retrofit(网络请求)、Glide(图片加载)、Picasso(图片加载)等。这些库简化了开发过程,提高...

    Android书架UI实现

    在Android应用开发中,创建一个引人入胜的用户界面(UI)是至关重要的,尤其对于书籍类应用,书架式UI设计能提供一种直观且富有吸引力的用户体验。"Android书架UI实现"是一个专为Android平台设计的项目,旨在模拟...

    Android开发笔记——UI基础编程

    这份"Android开发笔记——UI基础编程"的资料集包含了两部分:新版Android开发教程+笔记七--基础UI编程1.pdf和新版Android开发教程+笔记七--基础UI编程2.pdf,将深入讲解Android应用程序中用户界面的设计与实现。...

    Android UI开发——SlidingDrawer 抽屉效果

    今天我们要讨论的是一个经典的Android UI组件——SlidingDrawer,它提供了一种抽屉式的交互效果,常用于隐藏和显示额外的信息或者功能区域。SlidingDrawer的使用使得界面更加简洁,同时也增加了用户的探索乐趣。 ##...

    安卓Android源码——UI界面源码.zip

    这个名为“安卓Android源码——UI界面源码.zip”的压缩包,很显然是一个包含Android用户界面(UI)相关源代码的资源集合。下面我们将详细探讨Android UI界面的构建原理以及可能包含的知识点。 1. **Android UI框架*...

    Android源码——UI界面源码.rar

    总的来说,学习并理解这个“Android源码——UI界面源码.rar”中的内容,对于深入理解Android UI开发、提升自定义界面能力具有很大的帮助。开发者可以通过阅读源码,学习如何高效地创建、管理和交互UI组件,进一步...

    《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf

    《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用...

    Android程序研发源码Android ui开发类库示例源码.zip

    这份"Android程序研发源码Android ui开发类库示例源码.zip"压缩包提供了关于Android UI开发的一个实例源码——GreenDroid库。GreenDroid是一个开源的Android库,专为快速构建具有丰富UI特性的应用程序而设计。 ...

    安卓Android源码——炫丽书架源码.zip

    【标题】"安卓Android源码——炫丽书架源码.zip"所包含的是一个用于创建具有视觉吸引力的“书架”效果的Android应用源代码。这个炫丽书架的效果通常在电子阅读应用或者图书类应用中被用到,让用户有一种在虚拟空间中...

    Android源码——ui开发类库示例源码_new_19.zip

    总结起来,"Android源码——ui开发类库示例源码_new_19.zip"这个资源提供了丰富的Android UI开发示例,包括但不限于XML布局设计、UI库的使用、动画实现、自定义视图以及无障碍服务和多语言支持的设置。通过深入研究...

    Android源码——ui开发类库示例源码_new_19.7z

    总的来说,通过研究"Android源码——ui开发类库示例源码_new_19.7z",开发者可以深入了解Android UI开发的核心概念,掌握如何有效地利用Android提供的各种类库和工具来构建出色的应用界面。这不仅包括基本组件的使用...

    老罗Android开发视频教程-Android常用UI控件编程【32集】

    教程名称: 老罗Android开发视频教程-Android常用UI控件编程【32集】【】Android常用UI控件编程第七集【】Android常用UI控件编程第二十三集【】Android常用UI控件编程第二十九集【】Android常用UI控件编程第二十二...

    AndroidUI界面开发规范

    ### AndroidUI界面开发规范 #### 一、引言 随着移动设备的普及和发展,用户界面(UI)设计在软件开发中的重要性日益凸显。一个良好的UI不仅能够提升用户体验,还能够帮助开发者更好地传达产品理念。本篇文章将从...

    Android源码——图书书架源码.zip

    《Android源码——图书书架源码》是一个关于Android应用开发的资源包,主要展示了如何在Android平台上实现图书书架的界面与功能。这个压缩包包含了一些图片资源和核心源代码,下面将对其中涉及的关键知识点进行详细...

    AndroidStudio————实战演练——仿美团外卖菜单

    在本项目中,"AndroidStudio————实战演练——仿美团外卖菜单"是一个专注于使用Android Studio开发的应用程序实战案例,目标是创建一个类似于美团外卖的菜单功能。这个项目涵盖了多个Android开发的关键知识点,...

    安卓Android源码——UI设计之 仿做蘑菇街UI设计 源码.zip

    "安卓Android源码——UI设计之 仿做蘑菇街UI设计 源码.zip" 提供了一个实战案例,通过模仿知名电商平台蘑菇街的UI设计,帮助开发者学习和理解如何在Android平台上构建美观、易用的界面。这份源码不仅包含了设计元素...

Global site tag (gtag.js) - Google Analytics