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
* iOS入门群:83702688
* android开发进阶群:241395671
*/
分享到:
相关推荐
在现代Android开发中,更推荐使用`ViewPager`结合`TabLayout`(来自`androidx.appcompat.widget`库)或者`BottomNavigationView`(来自`androidx.navigation.ui`库)来实现滑动Tab效果。这两种方法更稳定,且有更好...
在Android应用开发中,下拉刷新(Pull To Refresh)功能是一项常见的UI交互设计,它允许用户通过在列表顶部向下拉动来触发数据的刷新操作。这一功能显著提升了用户体验,尤其是在查看实时信息更新时,如新闻、社交...
在Android应用开发中,UI设计是至关重要的组成部分,而PopupWindow则是实现丰富交互效果的一种工具。本篇文章将深入探讨如何在Android中使用PopupWindow,并通过一个具体的实例来讲解其用法。 PopupWindow是Android...
在Android UI开发中,实现界面元素的动态交互是提升用户体验的关键之一。本篇将深入探讨如何利用ViewFlipper组件和GestureDetector类实现左右滑动切换视图的效果,这在主页面或多个内容区域展示的场景中非常常见。 ...
9. **Third-party UI库**:除了官方组件,还有很多第三方库增强了Android的UI开发能力,如Butter Knife(视图注入)、Retrofit(网络请求)、Glide(图片加载)、Picasso(图片加载)等。这些库简化了开发过程,提高...
在Android应用开发中,创建一个引人入胜的用户界面(UI)是至关重要的,尤其对于书籍类应用,书架式UI设计能提供一种直观且富有吸引力的用户体验。"Android书架UI实现"是一个专为Android平台设计的项目,旨在模拟...
这份"Android开发笔记——UI基础编程"的资料集包含了两部分:新版Android开发教程+笔记七--基础UI编程1.pdf和新版Android开发教程+笔记七--基础UI编程2.pdf,将深入讲解Android应用程序中用户界面的设计与实现。...
今天我们要讨论的是一个经典的Android UI组件——SlidingDrawer,它提供了一种抽屉式的交互效果,常用于隐藏和显示额外的信息或者功能区域。SlidingDrawer的使用使得界面更加简洁,同时也增加了用户的探索乐趣。 ##...
这个名为“安卓Android源码——UI界面源码.zip”的压缩包,很显然是一个包含Android用户界面(UI)相关源代码的资源集合。下面我们将详细探讨Android UI界面的构建原理以及可能包含的知识点。 1. **Android UI框架*...
总的来说,学习并理解这个“Android源码——UI界面源码.rar”中的内容,对于深入理解Android UI开发、提升自定义界面能力具有很大的帮助。开发者可以通过阅读源码,学习如何高效地创建、管理和交互UI组件,进一步...
《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用...
这份"Android程序研发源码Android ui开发类库示例源码.zip"压缩包提供了关于Android UI开发的一个实例源码——GreenDroid库。GreenDroid是一个开源的Android库,专为快速构建具有丰富UI特性的应用程序而设计。 ...
【标题】"安卓Android源码——炫丽书架源码.zip"所包含的是一个用于创建具有视觉吸引力的“书架”效果的Android应用源代码。这个炫丽书架的效果通常在电子阅读应用或者图书类应用中被用到,让用户有一种在虚拟空间中...
总结起来,"Android源码——ui开发类库示例源码_new_19.zip"这个资源提供了丰富的Android UI开发示例,包括但不限于XML布局设计、UI库的使用、动画实现、自定义视图以及无障碍服务和多语言支持的设置。通过深入研究...
总的来说,通过研究"Android源码——ui开发类库示例源码_new_19.7z",开发者可以深入了解Android UI开发的核心概念,掌握如何有效地利用Android提供的各种类库和工具来构建出色的应用界面。这不仅包括基本组件的使用...
教程名称: 老罗Android开发视频教程-Android常用UI控件编程【32集】【】Android常用UI控件编程第七集【】Android常用UI控件编程第二十三集【】Android常用UI控件编程第二十九集【】Android常用UI控件编程第二十二...
### AndroidUI界面开发规范 #### 一、引言 随着移动设备的普及和发展,用户界面(UI)设计在软件开发中的重要性日益凸显。一个良好的UI不仅能够提升用户体验,还能够帮助开发者更好地传达产品理念。本篇文章将从...
《Android源码——图书书架源码》是一个关于Android应用开发的资源包,主要展示了如何在Android平台上实现图书书架的界面与功能。这个压缩包包含了一些图片资源和核心源代码,下面将对其中涉及的关键知识点进行详细...
在本项目中,"AndroidStudio————实战演练——仿美团外卖菜单"是一个专注于使用Android Studio开发的应用程序实战案例,目标是创建一个类似于美团外卖的菜单功能。这个项目涵盖了多个Android开发的关键知识点,...
"安卓Android源码——UI设计之 仿做蘑菇街UI设计 源码.zip" 提供了一个实战案例,通过模仿知名电商平台蘑菇街的UI设计,帮助开发者学习和理解如何在Android平台上构建美观、易用的界面。这份源码不仅包含了设计元素...