`
yhz61010
  • 浏览: 564312 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:12289
社区版块
存档分类
最新评论

[原创] Android ListView 在右上角添加三角形图标和文字

阅读更多
最终显示效果如下图,在右上角添加三角形图标并在图标内显示文字:

注意:右上角的红色三角形和里面的文字不是图片。
原理是使用 Drawable 画出一个正方形,然后将其旋转 45 度,使其达到三角形的效果。

虽然可以直接使用 TextView 将其旋转 45 度,并添加背景 Drawable,但是这么做完之后我发现,如果想调整文字在三角形中的相对位置或者调整三角形的大小,却不是很容易。

因此我的方案是,使用 View 单独显示三角形背景,然后再使用 TextView 单独显示文字。这样做的好处就是可以随意的调整文字的相对位置以及三角形的大小。最终效果详见上图。

代码如下:在 drawable 文件夹下新建 triangle_shape.xml 文件,用以显示三角形图标。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="-45"
            android:toDegrees="45"
            android:pivotX="0%"
            android:pivotY="-45%" >
            <shape android:shape="rectangle" >
                <!-- Border -->
                <stroke
                    android:width="10dp"
                    android:color="@color/red" />
                <!-- Background -->
                <solid android:color="@color/red" />
            </shape>
        </rotate>
    </item>
</layer-list>

在自己的 Layout 中,使用 triangle_shape.xml 作为背景,并添加三角形内需要显示的文字。
核心代码如下:
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/thumbnail"
        android:layout_width="150dp"
        android:layout_height="85dp"
        fresco:placeholderImage="@drawable/placehoderImg" />

    <FrameLayout
        android:id="@+id/onAirLayout"
        android:visibility="gone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/thumbnail"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/thumbnail">

        <!-- Attention Please -->
        <!--layout_width must be equal to layout_height and its value plus layout_marginBottom must be equal 85-->
        <!--PS: 85 is the height of placeholder image-->
        <View
            android:layout_width="115dp"
            android:layout_height="115dp"
            android:layout_gravity="top|right|end"
            android:layout_marginBottom="-30dp"
            android:background="@drawable/triangle_shape"
            android:rotation="0" />

        <TextView
            android:id="@+id/txtOnAir"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right|end"
            android:layout_marginTop="12dp"
            android:rotation="45"
            android:text="@string/cmn_on_air"
            android:textColor="@android:color/white"
            android:textSize="14sp" />
    </FrameLayout>
</RelativeLayout>

完整代码如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/swipe"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

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

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/thumbnail"
                android:layout_width="150dp"
                android:layout_height="85dp"
                fresco:placeholderImage="@drawable/placehoderImg" />

            <FrameLayout
                android:id="@+id/onAirLayout"
                android:visibility="gone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignEnd="@+id/thumbnail"
                android:layout_alignParentTop="true"
                android:layout_alignRight="@+id/thumbnail">

                <!-- Attention Please -->
                <!--layout_width must be equal to layout_height and its value plus layout_marginBottom must be equal 85-->
                <!--PS: 85 is the height of placeholder image-->
                <View
                    android:layout_width="115dp"
                    android:layout_height="115dp"
                    android:layout_gravity="top|right|end"
                    android:layout_marginBottom="-30dp"
                    android:background="@drawable/triangle_shape"
                    android:rotation="0" />

                <TextView
                    android:id="@+id/txtOnAir"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|end"
                    android:layout_marginTop="12dp"
                    android:rotation="45"
                    android:text="@string/cmn_on_air"
                    android:textColor="@android:color/white"
                    android:textSize="14sp" />
            </FrameLayout>
        </RelativeLayout>

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

            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginBottom="3dp"
                android:ellipsize="end"
                android:maxLines="1"
                android:text="Title"
                android:textAppearance="?attr/textAppearanceListItem"
                android:textColor="@android:color/black"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/subtitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="-3dp"
                android:drawableLeft="@drawable/ic_place"
                android:drawablePadding="3dp"
                android:ellipsize="end"
                android:gravity="fill_vertical"
                android:maxLines="1"
                android:text="Sub Title"
                android:textColor="@color/dim_gray"
                android:textSize="12sp" />
        </LinearLayout>
    </LinearLayout>
</FrameLayout>

参考文献:
https://stackoverflow.com/a/32223301/6091500
  • 大小: 138.9 KB
0
0
分享到:
评论
1 楼 ls0609 2017-08-02  
赞一个,支持下博主。

相关推荐

    Android ListView边框圆角美化

    4. **性能优化**:由于ListView项的复用机制,我们需要注意在`getView()`中正确地清除和设置每个项的视图状态,以防止上一个项的样式影响到当前项。例如,如果你在布局中添加了ImageView,记得在每次加载项时清除...

    android listview item 左右滑动

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。然而,为了提供更好的用户体验,开发者经常需要扩展ListView的功能,例如实现左右滑动的效果。这个功能通常被用于实现快速删除或者展示更多的...

    Android中ListView添加头部

    综上所述,添加头部到Android的ListView是一项常见的自定义需求。通过使用HeaderView参数或在Adapter内部处理,我们可以轻松地实现这一功能。同时,理解如何处理滚动事件和触摸事件将使我们的应用更具交互性。在实际...

    android listview刷新 左右滑动

    总的来说,要实现"android listview刷新 左右滑动",你需要理解`SwipeRefreshLayout`和`SwipeMenuListView`的工作原理,掌握如何在ListView中添加并使用它们,以及如何处理相关的用户交互和数据加载。这个过程涉及到...

    Android实现带图标的ListView

    本教程将详细介绍如何在Android中实现一个带图标的ListView。 ### 1. ListView的基本概念 ListView是Android中的一个视图容器,它可以显示一列可滚动的项目列表。每个列表项(ListView项)通常由一个布局文件定义,...

    Android ListView 中item的左右滑动动画效果的实现

    公司有个项目要用到类似手机QQ聊天记录列表ListView左右滑动后改变item的效果,网上没找到好的代码,偶然在安卓巴士的开源站http://d.apkbus.com/里面找到了SwipeToDismiss的源码...改成自己的显示另一个view的效果就行...

    Android ListView 下拉刷新、上拉加载

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。`下拉刷新`和`上拉加载`功能的实现,极大地提升了用户体验,让用户能够实时获取到最新的数据。本篇文章将深入探讨如何在ListView中实现这两种...

    在listview 控件标题上添加图标的模块

    以上代码展示了如何在`ListView`控件的标题上添加图标,通过定义和使用`LVCOLUMN`结构体,以及正确发送`LVM_SETCOLUMN`消息,我们能够轻松地实现这一功能,为用户提供更加丰富和直观的界面体验。

    android listview item 左右滑动删除

    然而,为了提供更好的用户体验,有时我们需要在ListView的每个Item上实现左右滑动删除的功能。这种交互方式常见于许多移动应用,如邮件客户端、社交应用等。本文将详细探讨如何在Android中实现这一功能。 首先,...

    Android编程实现ListView中item部分区域添加点击事件功能

    需求如题目:Android listview中item部分区域添加点击事件,在一个界面显示了listview,但显示的内容分为上下两部分,分别是白色的背景和蓝色的背景,现在需要只点击蓝色的背景,才能跳转到其他界面,解决方式如下:...

    Android 图标加文字ListView定制Demo

    综上所述,这个Demo将教你如何在Android应用中创建一个包含图标和文字的ListView,通过自定义Adapter实现数据绑定,并且可能会涉及到一些性能优化和交互设计。通过学习这个Demo,开发者可以更好地掌握Android UI设计...

    android的listview嵌套listview,列表嵌套列表 android studio版本

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。当需求涉及列表中的每个条目本身也需要展示一个子列表时,我们就会遇到ListView的嵌套问题。本教程将详细讲解如何在Android Studio环境下...

    android ListView 动态添加删除

    动态添加和删除ListView中的Item是一项常见的功能,尤其在构建需要用户交互的应用时。本文将深入探讨如何实现这个需求,以及涉及到的关键知识点。 首先,我们需要理解ListView的工作原理。ListView通过Adapter与...

    Android ListView扩展(图片+文字)

    通过以上步骤,我们就可以在Android Studio中实现一个具有图片和文字的扩展ListView。这只是一个基础示例,实际应用中还可以根据需求添加更多功能,如头尾视图、侧滑删除、动画效果等。记得在开发过程中,遵循...

    android 实现右上角PopupWindow弹出

    在Android应用开发中,PopupWindow是一个非常实用的组件,它能提供一种轻量级的对话框效果,可以在屏幕上的任意位置弹出,并且可以自定义其内容和样式。本示例将详细介绍如何实现一个位于右上角、类似QQ设置功能的...

    android listview左右滑动分页

    http://blog.csdn.net/icqapp/article/details/24978057 详看效果图...android listview左右滑动分页(viewpager嵌套listview进行分页),焦点图带圆焦点 先敬告学者:如在此项目上运行不了的直接找到本人QQ:508181017,

    Android listView选项滑动效果

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。`Android listView选项滑动效果`是指通过增强ListView的功能,使每个列表项可以左右滑动,通常用于实现更多的交互操作,比如滑动删除、切换...

    Android ListView添加Button及其事件

    以上就是关于“Android ListView添加Button及其事件”的详细知识,希望对你理解ListView的自定义和事件处理有所帮助。在实际开发中,你可以根据需求扩展这个例子,例如添加更多的交互元素,或者处理更复杂的业务逻辑...

    android listview左右滑动出菜单

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。然而,为了提供更加丰富的用户体验,开发者经常需要在ListView的基础上实现更多的交互功能,比如左右滑动出现编辑菜单。这个"android ...

    Android listview自动换行

    在Android开发中,ListView是一种非常常见的控件,用于展示...在实际应用中,可能还需要结合具体需求进行优化,例如添加间距、处理不同屏幕尺寸等,但基本思路就是利用自定义布局和适配器来控制ListView的显示方式。

Global site tag (gtag.js) - Google Analytics