android显示字符串,Android自定义View用切图显示字符串
近期开发收音机有个需求,将频率值以图片的形式显示出来(如结尾效果图所示)。然而,一开始用TextView写出来的效果太丑了,提交上去肯定不合格。于是乎我想到了写一个自定义View,将频率的数字切图排布在View上,满足效果图的需求,在此记录一下。
TextView表示的数字,Low得一批。
主要代码及相关注释
public class DigitalTextView extends LinearLayout {
public DigitalTextView(Context context) {
super(context);
init();
}
public DigitalTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
// 初始化
private void init() {
this.setOrientation(LinearLayout.HORIZONTAL);
}
/**
* 获取调频图片
*
* @param index 频率值
* @return 对应频率值的图片id
*/
private int getFreqDrawable(int index) {
int drawableId = -1;
switch (index) {
case 0:
drawableId = R.drawable.num_0;
break;
case 1:
drawableId = R.drawable.num_1;
break;
case 2:
drawableId = R.drawable.num_2;
break;
case 3:
drawableId = R.drawable.num_3;
break;
case 4:
drawableId = R.drawable.num_4;
break;
case 5:
drawableId = R.drawable.num_5;
break;
case 6:
drawableId = R.drawable.num_6;
break;
case 7:
drawableId = R.drawable.num_7;
break;
case 8:
drawableId = R.drawable.num_8;
break;
case 9:
drawableId = R.drawable.num_9;
break;
}
return drawableId;
}
/**
* 根据传递进来的字符,返回对应的图片资源
*
* @param c 传递进来的字符
* @return 对应的图片id
*/
private int getResourceForChar(char c) {
if (c == '.') {
return R.drawable.num_dot;
} else if (c >= '0' && c <= '9') {
return getFreqDrawable(c - '0');
} else {
return -1;
}
}
// 创建一个ImageView
private ImageView createImageView() {
ImageView imageView = new ImageView(getContext());
LayoutParams param = new LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
imageView.setLayoutParams(param);
return imageView;
}
/**
* 更新自定义TextView
* @param text 传递进来的字符串
*/
public void setDigitalText(String text) {
int startIndex = getChildCount() - text.length();// 起始位置,因为imageView的数量是根据字符串的长度创建的
if (startIndex < 0)//第一次更新的时候肯定是小于0的
startIndex = 0;
for (int i = 0; i < startIndex; i++) {
getChildAt(i).setVisibility(View.GONE);
}
//下面是根据字符串的长度,循环更换为对应的图片
for (int i = 0; i < text.length(); i++) {
int childId = i + startIndex;
int resId = getResourceForChar(text.charAt(i));//将每个字符转换为数字
if (resId != -1) {
if (childId == getChildCount()) {
addView(createImageView());//添加到LinearLayout中
}
ImageView child = ((ImageView) getChildAt(childId));
child.setVisibility(View.VISIBLE);
child.setImageResource(resId);
}
}
}
}
DigitalTextView 已经实现了把频率用drawable下的num_0~num9来显示了,因此只需要在Activity更新频率的方法里调用setDigitalText(mFreq)即可完美实现需求。
最后的效果图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android显示字符串,Android自定义View用切图显示字符串相关推荐
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]
http://blog.csdn.net/jj120522/article/details/8095852 示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这 ...
- Android动画特效之自定义View
Android动画特效之Animator属性动画实现_Angel-杭州的博客-CSDN博客 我在百忙之中抽出宝贵时间来实现Android动画特效,也就是Android Animator动画效果 ...
- android自定义View: 饼状图绘制(四)
本系列自定义View全部采用kt 系统mac android studio: 4.1.3 kotlin version1.5.0 gradle: gradle-6.5-bin.zip 本篇效果: 画矩 ...
- Android实现雪花特效自定义view
一.前言 这个冬天,老家一直没有下雨, 正好圣诞节,就想着制作一个下雪的特效. 圣诞祝福:平安夜,舞翩阡.雪花飘,飞满天.心与心,永相伴. 圣诞节是传统的宗教节日,对于基 督徒,那是庆祝耶稣的诞生,纪 ...
- Android 气泡动画(自定义View类)
Android 气泡动画(自定义View类) 一.前言 二.代码 1. 随机移动的气泡 2.热水气泡 一.前言 最近有需求制作一个水壶的气泡动画,首先在网上查找了一番,找到了一个文章. https:/ ...
- 各种金融类的自定义 View,基金走势图、分时图、蜡烛图、各种指标等,一步一步构建庞大的基金自定 View...
inancialCustomerView 项目地址:Tophold/FinancialCustomerView 简介:各种金融类的自定义 View,基金走势图.分时图.蜡烛图.各种指标等,一步一步构 ...
- 自定义view 太极八卦图
自定义view 太极八卦图
- Android自定义View之电池电量显示
自定义简单的电池电量显示.话不多说,直接上代码 package com.kimascend.thermometer.customview; import android.content.Context ...
- Android 自定义 View:左右两边显示 text 的 TextView(RightAndLeftTextView)
工作中有这样一个需求: 打开时动态添加,不知道有多少行,那就开动脑经:在 xml 中写的话,又不确定有多少,那就在代码中 addView,但是呢,需求中又有很多处的 UI 布局也是这样的样式(左右 t ...
最新文章
- ps aux|grep
- dynamo怎样由线生成体_语音生成效果评价不再逐句进行:谷歌提出长文本语音生成评价新系统...
- Node.js TLSWrap 实现中的释放后使用漏洞分析
- perlretut - Perl regular expressions tutorial ---- 中文版
- php抽奖设置数量,php实现自定义中奖项数和概率的抽奖函数示例
- 文件的操作,如何做文件上传
- 现在企业编程用java还是python_想转行做程序员,是学习 Java 还是 Python 更好?
- WebRTC系列- SDP详解
- 如何安装pygame模块
- com.android.dx.cf.iface.ParseException
- openvpn部署和迁移
- 利用setTimeout实现setInterval
- vue php聊天室,实例详解vue组件父子间通信之聊天室
- 「AI Timer 说」一人独享不如众人分享!
- 压缩视频大小画质不变,视频压缩大小清晰度不变怎么做?
- Confluence 6 修改空间名字和标识
- EDM电子邮件营销策划常用创意
- 右手螺旋判断磁感应强度方向_高中物理电流磁场的判断方法是什么?叉乘方向右手螺旋定则如何运用...
- 首都网络安全日直击 永信至诚“信息安全加油站”人气爆棚
- 真正射影像(TrueOrtho)的生产和应用
热门文章
- Android 系统定时管理器AlarmManager的使用
- [独库骑行之奇山异石]丹霞地貌和雅丹地貌
- VIP客户服务系统设计(外传)——面对变化的“世界”
- 结构型设计模式(2)—— 外观模式(Facade Pattern)
- 十种常见排序算法欢聚一堂
- Nginx Location块中proxy_pass配置/路径问题
- javascript 创建对象方式
- Centos环境下部署游戏服务器-iptables
- SQL Server 2012新功能
- 【Data guard】SWITCHOVER_STATUS为FAILED DESTINATION解决办法