简单定制Android控件(2) - 点赞列表控件

这篇博客介绍了如何在Android中实现一个可定制的点赞列表控件,满足特定需求,如显示用户名并允许点击操作,以及在用户过多时显示'等XX人'。作者分享了GitHub链接和实现难点,包括用户点击交互和用户名排序。
摘要由CSDN通过智能技术生成

国际惯例,先放github:

https://github.com/razerdp/PraiseWidget


放上效果图:


很多时候我们都看到点赞列表这个东东的存在,最典型的就是微信的赞。而最近我司也在做圈,无可避免的涉及到这个赞的控件。本来打算上网找个控件改改就算了,然而。。。也许我的搜索技术太渣,木有找到合适的。

于是懒惰的我,只好勉强唤醒脑里面睡着的那个勤奋的家伙,动手开工了。。。。。

开工之前当然需要了解下需求了,这次我司的需求跟普通的点赞有那么一丢丢的不同,废话不多说,直接上:

  1. 点赞嘛,当然要可以显示用户名,同时点击用户名可以做对应的操作(比如跳到他的个人主页?)
  2. 我司需求:要求点赞用户超过XX行,就显示等XX人,而不要完全显示
  3. 嗯。。。大概就这两点了- -


开工之前想了下关于这个点赞控件的难点:

  1. 用户点击的实现,以及用户名排序的问题
  2. 超过行数后显示等XX人
一开始,针对这两个问题感觉最快捷的方法不过于 FlowLayout+TextView,简单又快捷。然而用这个方法就会有一个问题,就是行数的问题,因为我们需要在绘制之前就要做到这些操作,也就是在控件被绘制之前得到行数,再显示,否则我们得到的行数永远都只能为0,因而无法做到第二点。

ps:后来想了一下,既然我们无法在当前控件绘制前得到一些数值,那我们可以直接new当前控件(父)对象,再得到需要的数值,然后把数值应用到当前的控件
pss:也许上面说的有点乱,这里打个比喻,比如说我们要设计一个控件A,而A继承B,通过重载某些方法来实现我们的控件。然而有一些数值需要在B的onDraw()里面得到,但我们需要A在onDraw()前就拿到这个数值,那么我们可以直接new出B对象,把数据塞进去,然后得到需要的数据,再把这个数据用在A身上,达到同样的效果。

回到正题,上面的两个ps都是我想到的笨方法,如果有更好的方法,求告知-V- 

当时没想到这些,于是放弃用FlowLayout,而且FlowLayout也有些不方便,于是就换了一种方法:TextView+Span。

Span这个东东可牛逼了,可以说对于文字的操作都可以用到这个神器来实现。而今天的这个控件,正使用该神器实现。
那么下面开工:

首先针对第一点:显示用户名同时可以进行点击跳转。

既然我们选择加工TextView,那么关于显示用户名这个东东就很好解决了,问题在于第二个点击跳转,这里我们使用ClickableSpan解决,ClickableSpan里面只有两个方法,一个onClick,一个updateDrawState,看着方法名,很容易就知道这两个东东是干嘛用的,很明显,我们需要用到onClick来做到点击事件,那么下面就先上ClickableSpan的代码
public class PraiseClick extends ClickableSpan{
    private static final int DEFAULT_COLOR=0xff517fae;

    private int color;
    private int userID;
    private String userNick;
    private Context mContext;

    public PraiseClick(Context context, String userNick, int userID, int color) {
        mContext = context;
        this.userNick = userNick;
        this.userID = userID;
        this.color = color;
    }

    public PraiseClick(Context context, int userID, int color) {
       this(context,"",userID,color);
    }

    public PraiseClick(Context context, int userID) {
       this(context,"",userID,0);
    }

    public PraiseClick(Context context, String userNick, int userID) {
       this(context,userNick,userID,0);
    }

    @Override
    public void onClick(View widget) {
        Toast.makeText(mContext,"当前用户名是: "+userNick+"   它的ID是: "+userID,Toast.LENGTH_SHORT).show();

    }

    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        //去掉下划线
        if (color == 0) {
            ds.setColor(DEFAULT_COLOR);
        } else {
            ds.setColor(color);
        }
        ds.setUnderlineText(false);
    }
}
在onClick里面目前为了展示,我只用了个Toast,如果需要别的事件,可以自己重载这里。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Android中实现红心点赞动画的方式有很多种,其中一种比较常见的方式是使用自定义View实现。在这里,我们介绍一种使用开源库FlowLikeView实现点赞动画的方法。 FlowLikeView是一个基于Android的开源库,它提供了一个自定义View,可以实现类似于Instagram的点赞动画效果。它提供了一组可定制的属性和回调,可以让你轻松地将点赞效果集成到你的应用中。 下面是使用FlowLikeView实现红心点赞动画的步骤: 1.添加依赖 在项目的build.gradle文件中添加以下依赖: ``` dependencies { implementation 'com.github.skydoves:flowlikeview:1.1.0' } ``` 2.在layout文件中添加FlowLikeView 在需要添加点赞动画的布局文件中添加FlowLikeView,例如: ``` <com.skydoves.flowlikeview.FlowLikeView android:id="@+id/flowLikeView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:flv_duration="500" app:flv_icon="@drawable/ic_favorite_red_24dp" app:flv_iconSize="24dp" app:flv_textSize="12sp" app:flv_textColor="@color/red" app:flv_textTypeface="sans-serif-medium" /> ``` 在这个例子中,我们设置了FlowLikeView的一些属性,例如动画持续时间、红心图标、文字大小和颜色等。 3.在代码中实现点赞动画 在代码中可以通过调用FlowLikeView的performClick()方法来触发点赞动画,例如: ``` findViewById(R.id.flowLikeView).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((FlowLikeView)v).performClick(); } }); ``` 这样就可以实现一个基本的红心点赞动画。如果需要更多的自定义,可以查看FlowLikeView的文档和源代码,进行更详细的配置和调整。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值