Android 高级UI设计笔记05:使用TextView实现跑马灯的效果
2015-10-25 15:05
966 查看
1. 使用TextView属性实现跑马灯的效果:
(1). 新建一个Android工程,命名为"MarqueeTextViewDemo",如下:
(2). 来到activity_main.xml如下:
(3). 来到MainActivity.java,如下:
(4). 布署程序到模拟器上,如下:
效果如下:
(5). 总结:
定义TextView标签的4个属性:
设置上面属性之后,此时TextView显示文字就会自动循环显示。[b]但是,对于一个大View中有很多子View来说,同一时刻只能有一个子View获得focus!也就是说当前这一屏上,最多只能有一个view能有跑马灯效果,而不能多个View同时都有跑马灯效果。[/b]
2. 自定义类MarqueeTextView继承自TextView实现跑马灯的效果:
(1)首先来到了activity_main.xml布局文件,如下:
(2)来到了MarqueeTextView继承自TextView,如下:
(3)来到了MainActivity.java:如下
(4)运行效果,如下:
总结:
-->1. [b]自定义类MarqueeTextView继承自TextView[/b]
• 实现三个构造函数;
[b]• 复写isfocued方法,返回true(默认都有有焦点)-----> 实现[b]多个View同时都有跑马灯效果,每个使用的MarqueeTextView都要焦点。[/b][/b]
平常只有一个有焦点在第一行上。
-->2. 使用自定义的类,方法是用包名和自定义类名代替TextView(src下的包名+类名)
(1). 新建一个Android工程,命名为"MarqueeTextViewDemo",如下:
(2). 来到activity_main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.himi.marqueetextviewdemo.MainActivity" > <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:singleLine="true" android:text="@string/hello_world" /> </RelativeLayout>
(3). 来到MainActivity.java,如下:
package com.himi.marqueetextviewdemo; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
(4). 布署程序到模拟器上,如下:
效果如下:
(5). 总结:
定义TextView标签的4个属性:
android:singleLine="true"//使其只能单行 android:ellipsize="marquee"//去掉省略号 android:focusable = "true"// 设置是否获得焦点 android:focusableInTouchMode = "true"//设置在Touch模式下View是否能取得焦点
设置上面属性之后,此时TextView显示文字就会自动循环显示。[b]但是,对于一个大View中有很多子View来说,同一时刻只能有一个子View获得focus!也就是说当前这一屏上,最多只能有一个view能有跑马灯效果,而不能多个View同时都有跑马灯效果。[/b]
2. 自定义类MarqueeTextView继承自TextView实现跑马灯的效果:
(1)首先来到了activity_main.xml布局文件,如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.himi.marqueetextviewdemo.MainActivity" > <com.himi.marqueetextviewdemo.MarqueeTextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:singleLine="true" android:text="@string/hello_world" /> <com.himi.marqueetextviewdemo.MarqueeTextView android:id="@+id/textview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:singleLine="true" android:layout_marginTop="15dp" android:text="@string/hello_world" /> </RelativeLayout>
(2)来到了MarqueeTextView继承自TextView,如下:
package com.himi.marqueetextviewdemo; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; public class MarqueeTextView extends TextView { public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO 自动生成的构造函数存根 } public MarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); // TODO 自动生成的构造函数存根 } public MarqueeTextView(Context context) { super(context); // TODO 自动生成的构造函数存根 } /** * 复写isfocued方法,返回true(默认都是有焦点,平常只有一个有焦点在第一行上) * 这样才能确保每一个MarqueeTextView都具备焦点 */ @Override public boolean isFocused() { // TODO 自动生成的方法存根 return true; } }
(3)来到了MainActivity.java:如下
package com.himi.marqueetextviewdemo; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
(4)运行效果,如下:
总结:
-->1. [b]自定义类MarqueeTextView继承自TextView[/b]
• 实现三个构造函数;
[b]• 复写isfocued方法,返回true(默认都有有焦点)-----> 实现[b]多个View同时都有跑马灯效果,每个使用的MarqueeTextView都要焦点。[/b][/b]
平常只有一个有焦点在第一行上。
-->2. 使用自定义的类,方法是用包名和自定义类名代替TextView(src下的包名+类名)
相关文章推荐
- Duilib应用之标签页(TabLayout)的使用
- LightOJ 1100 - Again Array Queries【巧用数组】求最接近的两个数
- lightoj 1100 - Again Array Queries 【思维题】
- ios学习之autolayout自动布局的简单理解 即UIKIt dymanic的使用
- buildozer的介绍和安装
- Stereo Matching文献笔记之(八):《On Building an Accurate Stereo Matching System on Graphics Hardware》读后感~
- UI优化
- UIView的层次调整,及子view布局模式自动布局模式(停靠模式)
- Prim POJ 2031 Building a Space Station
- UICollectionReusableView的用法,类似UITableView的分组
- EasyUI - Slider组件
- Codeforces Round #277 (Div. 2) E. LIS of Sequence DP
- EasyUI - NumberSpinner 组件
- 关于UITableView及dequeueReusableCellWithIdentifier的一些理解
- UI控件
- 【HDOJ】3436 Queue-jumpers
- 3、关于利用SqlSessionFactoryBuilder去构建SqlSessionFactory,以及Mybatis的dao的实现
- Dell D630 win7 x64 下 风扇控制程序 I8kfanGUI 解决方法
- codeforces #316 D.Tree Requests (巧妙的dfs序)
- Android Code Style Guidelines for Contributors