如何编码实现卡片式的listView

一直很喜欢使用知乎日报, 也一直很钟情于知乎日报的卡片式设计,不过基于某种原因,一直在项目中没怎么使用到,恰好今天在弄毕设的时候,想到确实可以再自己listView的美化下一些功夫,于是自然就想到了卡片式,便着手研究了下,实现了这种效果。效果图如下:

首先先写好我们的布局,既然是listView,当然就少不了两个基本的布局啦,一个就是大家熟悉的listView(我这里使用的是开源的XlistVIew),另一个就是listView的item布局啦。

ListView.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <me.maxwin.view.XListView
        android:id="@+id/xlistView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="@android:color/transparent"
        android:divider="@null"
        android:dividerHeight="@dimen/item_height"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:fadingEdge="none" >
    </me.maxwin.view.XListView>

</RelativeLayout>

相应的其Item布局如下:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:descendantFocusability="beforeDescendants">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:paddingTop="8dp"
        android:background="@drawable/item_card_background_seletor"
        android:descendantFocusability="afterDescendants" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/tv_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="哀家就是这么美!火了!"
                android:textColor="@color/black"
                android:textSize="15sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:orientation="horizontal" >

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:orientation="vertical" >

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:gravity="top"
                    android:orientation="vertical" >

                    <TextView
                        android:id="@+id/tv_content"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:gravity="top"
                        android:maxLines="2"
                        android:text="今天在深圳地铁上发生的一件颇有争议的撕逼大战,内容火爆,引爆新一年流行网络流行语"
                        android:textColor="@color/font_gray"
                        android:textSize="12sp" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:orientation="horizontal" >

                    <TextView
                        android:id="@+id/tv_date"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center_vertical|left"
                        android:text="22小时前|100次阅读"
                        android:textColor="@color/font_gray"
                        android:textSize="12sp" />

                </LinearLayout>
            </LinearLayout>

            <ImageView
                android:id="@+id/img_news"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginRight="5dp"
                android:src="@drawable/default_image" />
        </LinearLayout>
    </LinearLayout>

</FrameLayout>

注意:这里要注意的是因为是卡片式的风格,最外层必须使用FrameLayout。

当然为了实现每个item的点击的效果以及实现更为卡片式的3D效果,在其底部实现阴影效果,此时我们加入了一个背景和点击时显示的背景,代码如下:

item_card_background_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/item_card_state_pressed" android:state_focused="true"></item>
    <item android:drawable="@drawable/item_card_state_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/item_card_background"></item>

</selector>

1.其中点击时的背景效果(文件放于drawable中):

item_card_state_pressed.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item >
        <shape android:shape="rectangle">
            <solid android:color="#2989D4"/>
            <corners android:radius="2dp"/>
        </shape>
    </item>
    <item
        android:bottom="2dp"
        android:left="0dp"
        android:right="0dp"
        android:top="0dp">
        <shape android:shape="rectangle">
            <solid android:color="#E7E7E7"/>
            <corners android:radius="2dp"/>
        </shape>
    </item>

</layer-list>

2.未被点击时的背景效果:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#CABBBBBB"/>
            <corners android:radius="2dp"/>
        </shape>
    </item>
    <item
        android:bottom="2dp"
        android:left="0dp"
        android:right="0dp"
        android:top="0dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white"/>
            <corners android:radius="2dp"/>
        </shape>
    </item>

</layer-list>

通过这几部基本就将卡片式的listView效果给实现了。这里就不po出具体的listView实现java代码了,想必这块基本大家都知道了,而且这是运用在自己项目上的,所以也不好截出来。因此demo是没有的了,不过也就这几步就能实现了,不是很难。

时间: 2024-11-05 22:49:22

如何编码实现卡片式的listView的相关文章

android 卡片式视图组件 cardview的使用

cardview是放在support library v7包中的一个组件(recyclerview也是在这里喔,详细会在后边的博客里介绍) 开始在写recyclerview的demo的时候,发现别人写出来的都是卡片式的布局,很好看喔-而我写的还是和原来的ListView一个样式,查了半天,最后才发现在条目布局上出现了不同,这里也就涉及到了cardview的使用. <span style="font-size:14px;"><android.support.v7.wid

圆角边框以及阴影制作卡片式图片 - 学习笔记

圆角边框以及阴影制作卡片式图片 圆角边框 border-radius 卡片使用阴影 box-shadow 利用阴影给图片底部创造一个长方形 内部的元素会直接覆盖整个阴影 HTML 部分 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>卡片式图片&l

谈什么是卡片式设计?

卡片式设计 卡片,你或许不熟悉这个术语,但是你绝对不会对卡片的概念感觉陌生.现在,卡片在网页设计中是普遍存在的,并且还将越来越流行.事实上,Google,Twitter和Facebook这三大受推崇的网页全是这么设计的,所以至少粗略的看一下卡片是很值得的.但是,因为我们不想在这浅谈,所以让我们直接深入地了解一下吧! 什么是卡片? 简单的回答,卡片就是交互信息的承载体,通常以矩形的方式呈现.就像信用卡或者棒球卡,网页卡片以一个浓缩的形式提供了快速并且相关的信息. 所有的卡片特点就是交互性.不仅仅是

【Ratchet】卡片式布局

卡片式布局在手机版的网站中很常见,这一点Ratchet框架中,这一点还做得不错的. 本手机版网页的开放前端框架的搭建,在<[Ratchet]Ratchet2.0.2的下载.配置与Helloworld>(点击打开链接)中已经介绍过了. 比如如下的效果: 其实现代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&g

【AmazeUI】卡片式布局

本文与<[Ratchet]卡片式布局>(点击打开链接)为姊妹篇,在AmazeUI的官网上没有这种布局,但是,我们可以利用其面板组的方式去实现. 先贴上本网页所处的目录结构,同样地,在windows下的Web文件夹趴了几张图片做实验.当然,为了节省用户的流量与节省服务器的容量,实际的操作中不应该使用如此高清的图片. 做出如下的效果: 其现实的代码如下: <!--使用HTML5开发--> <!doctype html> <html class="no-js&

避免窗口切换闪烁——卡片式布局的使用方法

在一个程序中,如果每个模版的切换都需要开启一个新窗口,一来窗口逐渐多了会造成混乱,二来新窗口突然弹出造成的闪烁难免会然用户产生不好的体验. 这时,可以使用卡片式布局来实现在一个窗口内切换不同面板. 1:首先,往窗口拖动一个面板,作为母容器. 2:右键该面板,选择“设置布局”——>“卡片式布局” 3:之后就可以往该母容器添加面板,调整大小.添加组件.设置事件.注意,添加的面板要在导航器中调整等级,必须处于母容器内并且子容器并行等级.并且,卡片在母容器内的序号同其添加的顺序,而且从2开始递增.0,1

树莓派Odroid等卡片式电脑上搭建NAS教程系列6-miniDLNA

目录: 1. 树莓派Odroid等卡片式电脑上搭建NAS教程系列1-Ubuntu系统安装 2. 树莓派Odroid等卡片式电脑上搭建NAS教程系列2-SSH连接访问 3. 树莓派Odroid等卡片式电脑上搭建NAS教程系列3-挂载HDD硬盘+节电设置 4. 树莓派Odroid等卡片式电脑上搭建NAS教程系列4-FTP安装 5. 树莓派Odroid等卡片式电脑上搭建NAS教程系列5-Samba服务器安装 6. 树莓派Odroid等卡片式电脑上搭建NAS教程系列6-miniDLNA 该文章首发于浩瀚

【ExtJs】折叠式布局与卡片式布局

ExtJs中,除了border布局可以很好地做出成熟的界面,<[ExtJs]利用树状结构.Border布局与标签页刻划OA界面>(点击打开链接),常用的标签页布局<[ExtJs]tabPanel标签页与修改标签页的内容>(点击打开链接)以外.在ExtJs中我觉得最好的主布局还有折叠式布局与卡片式布局,而使组件一列排列vbox布局,与使组件一行排列hbox布局,我觉得还可以出出子布局,也就是主布局里面的东西,而那些什么表格布局,我觉得真没有什么用了,还不如直接放一个table标签或者

卡片式大学综合英语词汇(Windows Phone 8.1 RT app)

闲暇时间写的简易卡片式记单词app.词库是原滋原味的大学综合英语词汇,包含语音,使用卡片式设计.离线词库,随时随地记单词. 商店:http://www.windowsphone.com/zh-cn/store/app/%E5%A4%A7%E5%AD%A6%E7%BB%BC%E5%90%88%E8%8B%B1%E8%AF%AD%E8%AF%8D%E6%B1%87/2beffb97-59dc-4d31-b249-b889c5f4bf85?