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. jquery实现上传图片及图片大小验证、图片预览效果代码
  2. 12个有趣的C语言面试题及答案
  3. hdu 2570 迷障(贪心)
  4. 服务器操作系统字符集,设置服务器字符集
  5. gradle 构建 Smack 报错:Can't find android.jar for 8 API. + steps for building android platform
  6. 获取该字符串第N次出现的位置
  7. springboot页面中静态图片路径
  8. 在View页面,使用@if(){ }输出判断正确的内容
  9. mysql 迁移 乱码_迁移Windows下的MySQL时字符乱码问题
  10. Farrago for Mac(强大的现场多音频播放工具)
  11. Linux下rpm打包
  12. java 导出多个excel_Java导出Excel压缩包
  13. 【Verilog零基础入门-边看边练】学习笔记——第七讲 时序逻辑代码设计和仿真(三角波发生器)(一)
  14. 古马其顿国王-亚历山大
  15. iOS开发证书、bundle ID、App ID、描述文件、p12文件,及企业证书打包发布详述
  16. ChatGPT中文使用手册
  17. 如何计算IP报头的checksum
  18. linux分区方案为user,Ubuntu 为用户分配磁盘空间Linux 硬盘分区方案
  19. 1001. Poker (思维 / 模拟)(2020年百度之星*程序设计大赛-初赛二)
  20. OpenPose ImportError: No module named '_pafprocess'【swig】编译步骤

热门文章

  1. 共建WEB3.0基础设施 NodeSea推出分布式域名后缀 .fil .bzz .xch .iot
  2. 1075:字符串统计
  3. 独孤求败-小滴云架构大课十八式-xdclass2022
  4. 仿苹果 底部弹窗 选择列表
  5. matlab人口数据,matlab中国人口
  6. MATLAB APP设计工具
  7. 华为u8500开启log方法
  8. Linux电脑怎么接入arm开发板,PC机与ARM开发板之间实现NFS共享
  9. python获取所有上市公司的加权净资产收益率
  10. Python语言程序设计 习题1