50个Android开发技巧(11 为文字加入特效)
(原文地址:http://blog.csdn.net/vector_yi/article/details/24460227)
可是我们还须要解决显示的字体问题,让它看起来更像是一个真实的LED数字时钟。
我们在创建一个Androidproject时,会同一时候生成一个assets目录。用来存放须要利用到的资源。
在这里,我们首先须要在assets目录下放入一个我们须要用到的字体文件:digital-7.ttf
如图所看到的:
然后再编写LedTextView类,并在类中将字体设置为我们引入的字体digital-7.
public class LedTextView extends TextView {
private static final String FONTS_FOLDER = "fonts";
private static final String FONT_DIGITAL_7 = FONTS_FOLDER + File.separator
+ "digital-7.ttf";
private void init(Context context) {
AssetManager assets = context. getAssets();
final Typeface font = Typeface . createFromAsset( assets, FONT_DIGITAL_7);
setTypeface (font );// 设置字体
}
public LedTextView (Context context) {
super(context );
init( context);
}
public LedTextView (Context context, AttributeSet attrs) {
super(context , attrs );
init( context);
}
public LedTextView (Context context, AttributeSet attrs, int defStyle) {
super(context , attrs , defStyle );
init( context);
}
}
<merge xmlns:android ="http://schemas.android.com/apk/res/android" >
<com.vectoryi.hack011.view.LedTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/default_time"
android:textColor="#3300ff00"
android:textSize="80sp" />
<com.vectoryi.hack011.view.LedTextView
android:id="@+id/main_clock_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#00ff00"
android:textSize="80sp" />
</merge>
试想一下,当你<include
/>这个布局main.xml时,假设main.xml是这种:
<<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"> <com.vectoryi.hack011.view.LedTextView
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_gravity ="center"
android:text ="@string/default_time"
android:textColor ="#3300ff00"
android:textSize ="80sp" /> <com.vectoryi.hack011.view.LedTextView
android:id ="@+id/main_clock_time"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_gravity ="center"
android:textColor ="#00ff00"
android:textSize ="80sp" /> </FrameLayout>
public class MainActivity extends Activity {
private static final String DATE_FORMAT = "%02d:%02d:%02d" ;
private static final int REFRESH_DELAY = 500;
// 因为Android不同意其它线程操作UI,所以在此创建了一个Handler
private final Handler mHandler = new Handler();
//用来实时更新LedTextView显示的线程
private final Runnable mTimeRefresher = new Runnable() {
@Override
public void run() {
Calendar calendar = Calendar. getInstance (TimeZone
. getTimeZone( "GMT+8")); // 设置时区
final Date d = new Date();
calendar .setTime (d );
mTextView. setText( String. format (DATE_FORMAT ,
calendar .get (Calendar .HOUR ), calendar. get( Calendar. MINUTE),
calendar .get (Calendar .SECOND )));
mHandler. postDelayed (this , REFRESH_DELAY );
}
};
private TextView mTextView ;
@Override
public void onCreate(Bundle savedInstanceState ) {
super .onCreate (savedInstanceState );
setContentView (R .layout .main );
mTextView = (TextView ) findViewById (R .id .main_clock_time );
}
@Override
protected void onResume() {
super .onResume ();
mHandler. post( mTimeRefresher );
}
@Override
protected void onStop() {
super .onStop ();
mHandler. removeCallbacks (mTimeRefresher );
}
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmVjdG9yX3lp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
<com.vectoryi.hack011.view.LedTextView
android:id ="@+id/main_clock_time"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_gravity ="center"
android:shadowColor ="#00ff00"
android:shadowDx ="0"
android:shadowDy ="0"
android:shadowRadius ="10"
android:textColor ="#00ff00"
android:textSize ="80sp" />
最后附上GitHub相关资料(https://github.com/VectorYi/LedTextView.git)和源代码下载链接(源代码点我).
50个Android开发技巧(11 为文字加入特效)的更多相关文章
- 50个android开发技巧
50个android开发技巧 http://blog.csdn.net/column/details/androidhacks.html
- 50一个Android开发技巧(01 利用好layout_weight属性)
问题:如何将一个Button放置在布局的中间,并设置其宽度parent的50%? 分析:问题想要达到的效果应该是这样: (原文地址:http://blog.csdn.net/vector_yi/art ...
- 50个Android开发技巧(09 避免用EditText对日期进行验证)
我们都知道,在表单中对数据进行验证不但无聊并且easy出错. (原文地址:http://blog.csdn.net/vector_yi/article/details/24424713) 想象一下,一 ...
- 50个Android开发技巧(02 延迟载入和避免反复渲染视图)
当你在Application中创建复杂的布局时.页面的渲染过程也变得更加缓慢. 此时,我们须要利用 <include />标签(避免反复渲染)和 ViewStub类(延迟载入)来优化我们的 ...
- 50个Android开发技巧(24 处理ListView数据为空的情况)
在移动平台上为用户展示数据的一个经常用法是将数据填充进一个List内,而此时须要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/d ...
- 50个Android开发技巧(10 为TextView加入样式)
首先来看一个控件的例子: (原文地址:http://blog.csdn.net/vector_yi/article/details/24428085) 手机上类似这种场景你一定已经见过非常多次了,但有 ...
- 50个Android开发技巧(03 自己定义ViewGroup)
问题:怎样创建一个例如以下图所看到的的布局? 图1 (原文地址:http://blog.csdn.net/vector_yi/article/details/244155 ...
- 50个Android开发技巧(12 为控件加入圆角边框)
控件的圆角边框能够使你的App看起来更美观,事实上实现起来也非常easy. (原文地址:http://blog.csdn.net/vector_yi/article/details/24463025) ...
- 50个Android开发人员必备UI效果源码[转载]
50个Android开发人员必备UI效果源码[转载] http://blog.csdn.net/qq1059458376/article/details/8145497 Android 仿微信之主页面 ...
随机推荐
- MySQL root密码重置报错:mysqladmin: connect to server at 'localhost' failed的解决方案!
-- ==================================================================== -- mysqladmin: connect to s ...
- eclipse config 3 构造pydev
什么是不是说生命是短暂的.我用python 准备工作 sudo apt-get install python3-dev 例如以下操作 依次点击菜单 Help->Install New Softw ...
- Tomcat免安装版的环境变量配置以及Eclipse下的Tomcat配置和测试
Tomcat是目前比较流行的开源且免费的Web应用服务器,在我的电脑上第一次安装Tomcat,再经过网上教程和自己的摸索后,将这个过程 重新记录下来,以便以后如果忘记了可以随时查看. 注意:首先要明确 ...
- B - 畅通工程(并查集)
对并查集理解之后就可以做这种题了,虽说这种题做的不多,这道题做过才这么快搞定,可是还是挺happy滴,加油 Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接 ...
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )
一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...
- POJ 2449 求第K短路
第一道第K短路的题目 QAQ 拿裸的DIJKSTRA + 不断扩展的A* 给2000MS过了 题意:大意是 有N个station 要求从s点到t点 的第k短路 (不过我看题意说的好像是从t到s 可能是 ...
- css如何li中选中后加上class属性js控制
<ul> <li class=""pageson"><span>1</span></li> <li> ...
- 【Demo 0025】注册/反注册窗体类RegisterClassEx/UnregisterClass
所有窗体在创建前都必须注册窗体类,只有注册的窗体类才被系统认知并允许实例化,换句话说通过注册告诉进程窗体管理器此类窗体的属性如: 背景色,窗体上的鼠标样式以及窗体事件处理函数等; 有一些控件类系统自 ...
- C Tips:显示点阵汉字的小样例
非常简陋的一段小程序,演示怎样显示点阵字库.有时间的时候再详解. #include <stdio.h> #include <stdlib.h> struct HzkInfoSt ...
- css3处理sprite背景图压缩来解决H5网页在手机浏览器下图标模糊的问题
近期在负责一个微信H5 App项目,遇到一个郁闷的问题,手机浏览器查看网页时图标都是模糊的,有锯齿,电脑浏览器显示则是正常.大概知道是分辨率适配等类型的问题,后来网上查找了一些办法.大部分的解决方式都 ...