Android UI之自定义——最简单的仿QQ音乐歌词颜色渐变

记得刚开始做android的时候,就发现QQ音乐歌词颜色渐变的效果,就在网上搜索过,但是就是没有找到满意的。今天突然用QQ音乐听歌的时候,看到歌词颜色渐变,决定来分析看看,没想到实现原来如此简单。这篇只是将最简单的歌词颜色渐变功能,不包括歌词滚动等效果。

首先来看下QQ音乐歌词界面

实现步骤

从界面上可以看出,是通过不同颜色的文本叠加所形成的视觉效果。那么android文本一般使用TextView实现,那就来试试用TextView在layout中实现。

Layout尝试

需要一个比较长的TextView和一个短的TextView

android:layout_height="wrap_content" >

android:layout_height="wrap_content"

android:singleLine="true"

android:text="最简单的仿QQ音乐歌词颜色渐变"

android:textAppearance="?android:attr/textAppearanceLarge"

android:textColor="#726463" />

android:layout_height="wrap_content"

android:singleLine="true"

android:text="最简单的仿QQ音乐歌词颜色渐变"

android:textAppearance="?android:attr/textAppearanceLarge"

android:textColor="#39DF7C" />

上面一个确实是一个长点的TextView和一个短点的TextView,效果如下

按照设置40dp的width,应该显示2个字才对。所以失败

接下来修改layout,关键属性android:ellipsize,当设置这个属性为none,如下

android:layout_height="wrap_content" >

android:layout_height="wrap_content"

android:singleLine="true"

android:text="最简单的仿QQ音乐歌词颜色渐变"

android:textAppearance="?android:attr/textAppearanceLarge"

android:textColor="#726463" />

android:layout_height="wrap_content"

android:ellipsize="none"

android:singleLine="true"

android:text="最简单的仿QQ音乐歌词颜色渐变"

android:textAppearance="?android:attr/textAppearanceLarge"

android:textColor="#39DF7C" />

效果图如下:

貌似好像成功了,接下来看下面封装LRCTextView

2. LRCTextView封装

直接上代码

package com.example.qqmusiclrc.view;

import android.annotation.SuppressLint;

import android.content.Context;

import android.graphics.Color;

import android.util.AttributeSet;

import android.view.View;

import android.widget.RelativeLayout;

import android.widget.TextView;

@SuppressLint("NewApi")

public class LRCTextView extends RelativeLayout {

private TextView tvDefault;

private TextView tvSelect;

private String lrc = "我是测试歌词 我是测试歌词 我是测试歌词";

/**

* 设置歌词

*

*@param lrc

*/

public void setLrc(String lrc) {

this.lrc = lrc;

tvDefault.setText(lrc);

tvSelect.setText(lrc);

}

public LRCTextView(Context context, AttributeSet attrs, int defStyleAttr,

int defStyleRes) {

super(context, attrs, defStyleAttr, defStyleRes);

init();

}

public LRCTextView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init();

}

public LRCTextView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

public LRCTextView(Context context) {

super(context);

init();

}

private void init() {

tvDefault = new TextView(getContext());

tvDefault.setText(lrc);

tvDefault.setTextColor(Color.parseColor("#726463"));

tvDefault.setEllipsize(null);

tvDefault.setSingleLine();

tvDefault.setTextSize(16);

tvSelect = new TextView(getContext());

tvSelect.setTextColor(Color.parseColor("#39DF7C"));

tvSelect.setText(lrc);

tvSelect.setEllipsize(null);

tvSelect.setSingleLine();

tvSelect.setTextSize(16);

addView(tvDefault);

addView(tvSelect);

tvSelect.setWidth(0);

}

@Override

protected void onWindowVisibilityChanged(int visibility) {

super.onWindowVisibilityChanged(visibility);

if (visibility == View.VISIBLE) {

postDelayed(new Runnable() {

@Override

public void run() {

setPercent(percent);

}

}, 10);

}

}

private float percent;

/**

* 设置颜色渐变百分比

*

*@param percent

*/

public void setPercent(float percent) {

this.percent = percent;

setSelectWidth((int) (getSelectWidth() * percent));

}

private int getSelectWidth() {

return tvDefault.getWidth();

}

private void setSelectWidth(int pixels) {

if (pixels <= getSelectWidth()) {

tvSelect.setWidth(pixels);

}

}

}

代码很简单,我就不多说啥了。

最后

上传demo,点击这里下载(后续补上,csdn还没审核通过,很奇怪。现在需要代码的请留下邮箱)

android 仿qq音乐歌词,Android UI之自定义——最简单的仿QQ音乐歌词颜色渐变相关推荐

  1. Android零基础入门第24节:自定义View简单使用

    Android零基础入门第24节:自定义View简单使用 原文:Android零基础入门第24节:自定义View简单使用 当我们开发中遇到Android原生的组件无法满足需求时,这时候就应该自定义Vi ...

  2. iOS微信QQ聊天界面的UI框架以及Socket简单实现群聊功能

    7.1日更新 Python3 TCP Demo相关 https://blog.csdn.net/Deft_MKJing/article/details/80851879 2.2日更新,socket简易 ...

  3. Android 第三方库--2017年Android开源项目及库汇总

    转自:http://blog.csdn.net/jsonnan/article/details/62215287 东西有点多,但是资源绝对nice,自己都全部亲身体验过了,大家可放心使用 github ...

  4. Android零基础入门第40节:自定义ArrayAdapter

    原文:Android零基础入门第40节:自定义ArrayAdapter ListView用起来还是比较简单的,也是Android应用程序中最重要的一个组件,但其他ListView可以随你所愿,能够完成 ...

  5. Android自定义View,高仿QQ音乐歌词滚动控件!

    最近在以QQ音乐为样板做一个手机音乐播放器,源码下篇博文放出.今天我想聊的是这个QQ音乐播放器中歌词显示控件的问题,和小伙伴们一起来探讨怎么实现这个歌词滚动的效果.OK,废话不多说,先来看看效果图: ...

  6. android 仿qq好友动态,Android UI仿QQ好友列表分组悬浮效果

    本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeade ...

  7. 高仿手机QQ音乐之——Android带进度条的开关

    最新版的手机QQ音乐体验确实不错,发现首页播放按钮可以显示歌曲当前进度条,觉得挺有新意!效果如下: 自己琢磨了下,可以用自定义组件来实现,试着做了一下,效果如下: 整理了下思路,大概设计流程是这样的: ...

  8. 【android】音乐播放器之UI设计的点点滴滴

    学习Android有一个多月,看完了<第一行代码>以及mars老师的第一期视频通过音乐播放器小项目加深对知识点的理解.从本文开始,将详细的介绍简单仿多米音乐播放器的实现,以及网络解析数据获 ...

  9. Android音乐播放器 -- UI 代码构现

    Fragment是 android3.0之后出现的概念, 目前广泛使用与各种App中,比如大家非常熟悉的微信,QQ等的切换,我使用了Fragment实现 我的 / 歌手 / 专辑 列表切换,下面是利用 ...

  10. android仿酷狗界面,Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

    简介 该开源依赖库是乐乐音乐播放器里的一个歌词模块功能,现在把该功能模块独立出来进行优化,并弄成了一个开源依赖库,其它音乐播放器项目只要引用该库并调用接口,便可轻松实现与乐乐音乐播放器一样的动感歌词显 ...

最新文章

  1. python操作三大主流数据库(6)python操作mysql⑥新闻管理后台功能的完善(增、ajax异步删除新闻、改、查)...
  2. 05. 取SQL分组中的某几行数据
  3. Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题
  4. 3520a mmz错误解决方法
  5. AddOutParameter引发类型问题
  6. 博客园自动显示随笔标签
  7. 解码2017双11:全球狂欢新记录背后的阿里云存储
  8. 基础强化:深入理解JVM中的方法调用
  9. python多元回归因子选取_Python中的多元回归(带因子选择)
  10. 最新短视频去水印小程序源码/带流量主/外卖CPS系统/批量解析/修改MD5
  11. 基于树莓派的智能魔镜,支持人脸识别、情感监测、热词唤醒、语音交互,以及与手机APP交互、温湿度/新闻热点/日期显示等
  12. Tableau宣布退出中国市场,背后的原因细思恐极...
  13. vue+i18n 切换语言后无法刷新数据 的 解决方案
  14. QFile读取移动硬盘文件卡死问题
  15. 使用keras时候,pycharm控制台太多日志,导致最开始的有用信息被覆盖,解决方案
  16. Linux实例丢失SSH密钥对的解决步骤
  17. 双曲铝单板是怎么生产的?
  18. IntelliJ IDEA单元测试入门
  19. 五.抽象接口与依赖反转(C面向对象开发)
  20. 双流中学高2021年高考成绩查询,2020成都57所高中高考成绩大汇总,哪些学校考得好,家长心知肚明!...

热门文章

  1. Mystery——团队作业——系统设计
  2. 基于python3的百度街景地图爬虫
  3. 线性代数笔记1.1n阶行列式
  4. 总结2019,立2020flag
  5. LED背光源技术特点
  6. gmail 设置 smtp_如何在Linux上使用Gmail或SMTP设置电子邮件警报
  7. 双创项目_宫颈癌风险智能检测(2)
  8. electron操作注册表时,regedit模块功能缺少deleteValue功能的解决办法
  9. linux命令行连接蓝牙音箱,有些Linux发行版用蓝牙连接天猫精灵和小爱音箱没声音...
  10. P1157 组合的输出(#define mian main)