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

news/2025/2/12 8:02:51/

转载请注明本文出自JFlex的博客http://blog.csdn.net/jflex/article/details/46550849,请尊重他人的辛勤劳动成果,谢谢!

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

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


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

这里写图片描述


实现步骤

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

  1. Layout尝试
    需要一个比较长的TextView和一个短的TextView

    <RelativeLayout
        android:layout_width="wrap_content"android:layout_height="wrap_content" ><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:singleLine="true"android:text="最简单的仿QQ音乐歌词颜色渐变"android:textAppearance="?android:attr/textAppearanceLarge"android:textColor="#726463" /><TextView
            android:layout_width="40dp"android:layout_height="wrap_content"android:singleLine="true"android:text="最简单的仿QQ音乐歌词颜色渐变"android:textAppearance="?android:attr/textAppearanceLarge"android:textColor="#39DF7C" />
    </RelativeLayout>

    上面一个确实是一个长点的TextView和一个短点的TextView,效果如下
    这里写图片描述
    按照设置40dp的width,应该显示2个字才对。所以失败

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

 <RelativeLayout
        android:layout_width="wrap_content"android:layout_height="wrap_content" ><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:singleLine="true"android:text="最简单的仿QQ音乐歌词颜色渐变"android:textAppearance="?android:attr/textAppearanceLarge"android:textColor="#726463" /><TextView
            android:layout_width="40dp"android:layout_height="wrap_content"android:ellipsize="none"android:singleLine="true"android:text="最简单的仿QQ音乐歌词颜色渐变"android:textAppearance="?android:attr/textAppearanceLarge"android:textColor="#39DF7C" /></RelativeLayout>

效果图如下:
这里写图片描述
貌似好像成功了,接下来看下面封装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);}@Overrideprotected void onWindowVisibilityChanged(int visibility) {super.onWindowVisibilityChanged(visibility);if (visibility == View.VISIBLE) {postDelayed(new Runnable() {@Overridepublic 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,点击这里下载


http://www.ppmy.cn/news/626316.html

相关文章

python爬虫qq音乐歌词_Python如何爬取qq音乐歌词到本地

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 闲来无事听听歌&#xff0c;听到无聊唠唠嗑&#xff0c;你有没有特别喜欢的音乐,你有没有思考或者尝试过把自己喜欢的歌曲的歌词全部给下载下来呢?…

android qq音乐歌词怎么实现,Android自定义View,高仿QQ音乐歌词滚动控件!

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

爬取QQ音乐周杰伦前五页歌曲的歌词

import requests import json # 引用requests,json模块url https://c.y.qq.com/soso/fcgi-bin/client_search_cpheaders {referer:https://y.qq.com/portal/search.html,# 请求来源user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, l…

MusicBee 歌词插件(基于QQ音乐API)

MusicBee 歌词插件&#xff08;基于QQ音乐API&#xff09; MusicBee 是一个很棒的免费音乐管理、播放软件&#xff0c;支持通过插件来扩展功能。然而 MusicBee 在初始情况下仅对外国的几个歌词数据库进行检索&#xff0c;得到的结果一般是不带时间轴的纯文本歌词&#xff0c;并…

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

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

Scrapy爬取QQ音乐、评论、下载、歌曲、歌词

文章目录 Scrapy爬取QQ音乐、评论、下载、歌曲、歌词爬取分析1、分析页面的歌手信息2、编写代码Item.py中编写爬取的信息setting.py中的配置信息Spider下的music.py编写代码 3、分析歌单列表在music.py中继续编程 4、分析歌词请求爬取歌词代码的编写歌词信息的清洗 5、分析评论…

QQ音乐中任何歌曲完全免费下载方法

喜欢在玩电脑的时候开着QQ音乐,往往听到好歌就想把它扔P3里边去但QQ自带的下载功能要开通绿钻才能用,且有些歌曲还不开放下载,于是我就开始找下载的方法最开始就是右键点歌曲__搜索__按歌曲,在SOSO搜索结果中找它的URL地址,复制到迅雷中下载但有些最新的歌在SOSO中搜不到,而且现…

网易云音乐云盘存歌曲加歌词

网易云云盘存歌曲加歌词 目录 网易云云盘存歌曲加歌词解决办法成功效果编写歌曲文件第一种第二种 其他问题补充 问题&#xff1a;我们从网上下载的音乐存在网易云音乐云盘时&#xff0c;是没有歌词的如下图 解决办法 解决办法&#xff1a; 第一&#xff1a;先删除没有歌词的那…