androidtextview跑马灯
Ⅰ 如何让TextView总是跑走马灯效果
首先,使用TextView实现走马灯形式的滚动显示,只需要对其设置两个属性:
android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever"
但是,TextView的滚动显示,有一个前提,TextView需要必须处于focus状态。当TextView失去焦点的时候,TextView将会停止滚动。
Ⅱ android垂直TextView怎么能让它自动滚动
这是跑马灯的效果。实现该功能步骤:
1、自定义Views,继承自TextView。
2、重写onDrow方法,计算每次的滚动的距离。
3、计算view的Y轴的重点,让当前显示的处于高亮显示状态。
4、定时的刷新View使其界面不断的刷先,出现滚动的效果。
5、实现数据结构,将数据传给view。
几个步骤代码可以参考下面
java">下面看看主要代码:
1、创建一个类继承TextView
/**
*@authorxushilin
*
*垂直滚动的TextViewWidget
*/
2、实现构造函数:
publicVerticalScrollTextView(Contextcontext){
super(context);
init();
}
publicVerticalScrollTextView(Contextcontext,AttributeSetattr){
super(context,attr);
init();
}
publicVerticalScrollTextView(Contextcontext,AttributeSetattr,inti){
super(context,attr,i);
init();
}
privatevoidinit(){
setFocusable(true);
//这里主要处理如果没有传入内容显示的默认值
if(list==null){
list=newArrayList<Notice>();
Noticesen=newNotice(0,"暂时没有通知公告");
list.add(0,sen);
}
//普通文字的字号,以及画笔颜色的设置
mPaint=newPaint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(16);
mPaint.setColor(Color.BLACK);
mPaint.setTypeface(Typeface.SERIF);
//高亮文字的字号,以及画笔颜色的设置
mPathPaint=newPaint();
mPathPaint.setAntiAlias(true);
mPathPaint.setColor(Color.RED);
mPathPaint.setTextSize(16);
mPathPaint.setTypeface(Typeface.SANS_SERIF);
}
3、从写onDraw方法,并计算文字的行距,并且将将普通文字和高亮文字,在这个方法中绘制出来
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
canvas.drawColor(0xEFeffff);
Paintp=mPaint;
Paintp2=mPathPaint;
p.setTextAlign(Paint.Align.CENTER);
if(index==-1)
return;
p2.setTextAlign(Paint.Align.CENTER);
canvas.drawText(list.get(index).getName(),mX,middleY,p2);
floattempY=middleY;
for(inti=index-1;i>=0;i--){
tempY=tempY-DY;
if(tempY<0){
break;
}
canvas.drawText(list.get(i).getName(),mX,tempY,p);
}
tempY=middleY;
for(inti=index+1;i<list.size();i++){
tempY=tempY+DY;
if(tempY>mY){
break;
}
canvas.drawText(list.get(i).getName(),mX,tempY,p);
}
}
4、计算Y轴中值以及更新索引
protectedvoidonSizeChanged(intw,inth,intow,intoh){
super.onSizeChanged(w,h,ow,oh);
mX=w*0.5f;
mY=h;
middleY=h*0.5f;
}
privatelongupdateIndex(intindex){
if(index==-1)
return-1;
this.index=index;
returnindex;
}
5、定时更新view,并将接口暴露给客户程序调用。
publicvoipdateUI(){
newThread(newupdateThread()).start();
}
{
longtime=1000;
inti=0;
publicvoidrun(){
while(true){
longsleeptime=updateIndex(i);
time+=sleeptime;
mHandler.post(mUpdateResults);
if(sleeptime==-1)
return;
try{
Thread.sleep(time);
i++;
if(i==getList().size())
i=0;
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
HandlermHandler=newHandler();
RunnablemUpdateResults=newRunnable(){
publicvoidrun(){
invalidate();
}
};
6、xml布局文件中调用:
<?xmlversion="1.0"encoding="utf-8"?>
<!--.-->
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<com.demo.xsl.text.SampleView
android:id="@+id/sampleView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/selector"
/>
</LinearLayout>
7、java代码中调用,传递数据:
packagecom.demo.xsl.text;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
{
SampleViewmSampleView;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSampleView=(SampleView)findViewById(R.id.sampleView1);
Listlst=newArrayList<Sentence>();
for(inti=0;i<30;i++){
if(i%2==0){
Sentencesen=newSentence(i,i+"、金球奖三甲揭晓C罗梅西哈维入围");
lst.add(i,sen);
}else{
Sentencesen=newSentence(i,i+"、公牛欲用三大主力换魔兽?????");
lst.add(i,sen);
}
}
//给View传递数据
mSampleView.setList(lst);
//更新View
mSampleView.updateUI();
}
}
Ⅲ 谁知道在fragment中listview的item中的textview跑马灯怎么实现
TextView中有个ellipsize属性,作用是当文字过长时,该控件该如何显示,解释如下:
android:ellipsize=”start”—–省略号显示在开头
2.android:ellipsize=”end”——省略号显示在结尾
3.android:ellipsize=”middle”—-省略号显示在中间
4.android:ellipsize=”marquee”–以跑马灯的方式显示(动画横向移动)
文字左右滚动三个属性:
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局。只要在layout中简单设置几个属性就可以轻松实现。
<TextView
android:id="@+id/tvCWJ"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" <!--垂直滚动条-->
android:singleLine="false" <!--实现多行-->
android:maxLines="15" <!--最多不超过15行-->
android:textColor="#FF0000"
/>
Ⅳ android textview 怎么实现文字滚动
TextView实现文字滚动需要以下几个要点:
1.文字长度长于可显示范围:android:singleLine="true"
2.设置可滚到,或显示样式:android:ellipsize="marquee"
3.TextView只有在获取焦点后才会滚动显示隐藏文字,因此需要在包中新建一个类,继承TextView。重写isFocused方法,这个方法默认行为是,如果TextView获得焦点,方法返回true,失去焦点则返回false。跑马灯效果估计也是用这个方法判断是否获得焦点,所以把它的返回值始终设置为true。ellipsize属性
设置当文字过长时,该控件该如何显示。有如下值设置:”start”—–省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)marqueeRepeatLimit属性
在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为marquee_forever时表示无限次。focusable属性
能否获得焦点,同样focusableInTouchMode应该是滑动时能否获得焦点
Ⅳ Android中实现TextView垂直滚动,像跑马灯那样,但是垂直的
要实现垂直滚动的,你可以用scrollview这个组件,不需要什么代码,只需要在xml文件,将textview嵌套进scrollview进去就行了。
<ScrollView android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
............//自己定义你的TextView组件
><TextView>
<ScrollView>
Ⅵ Android中TextView如何实现水平和垂直滚动
殇 殇云的专栏 云的专栏 软件开发锋颤 软件开发 一 一、只想让TextView显示一行,但是文字超过 、只想让TextView显示一行,但是文字超过 在开头显示省略号 android:singleLine="true" android:ellipsize="start" 在结尾显示省略号 android:singleLine="true" android:ellipsize="end" 在中间显示省略号 android:singleLine="true" android:ellipsize="middle" 横向自动滚动(跑马灯效果)段裂 android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" 以上4个效果都要加上�0�2android:singleLine="true",因为TextView默认是会自动换行的 android:marqueeRepeatLimit="marquee_forever"是设置银燃败永远重复,当然你也可以设置具体的数字 android:focusable="true"和android:focusableInTouchMode="true"一定要加上,不然滚动效果出不来在Java代码中加入下面一句话就可以实现垂直滚动
Ⅶ android中怎样实现图片的跑马灯效果
Android自带的跑马灯效果不太好控制,不能控制速度,不能即时停止和启动,而且还受焦点的影响蛋疼不已。由于项目需求需要用的可控制性高的跑马灯效果,所以自己写了一个自定义的TextView
注意:在布局文件引用本view时,paddingLeft,paddingRigh都必须为0dp,需要增加这两个属性的,大家可以自行修改代码。
android:ellipsize="marquee"android:singleLine="true"这两个属性也要加上
{
privateintcurrentScrollX;//当前滚动的位置
privatebooleanisStop=false;
privateinttextWidth;
privatebooleanisMeasure=false;
publicMarqueeText(C
ontextcontext){
super(context);
//TODOAuto-generatedconstructorstub
}
publicMarqueeText(Contextcontext,AttributeSetattrs){
super(context,attrs);
}
publicMarqueeText(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
}
@Override
protectedvoidonDraw(Canvascanvas){
//TODOAuto-generatedmethodstub
super.onDraw(canvas);
if(!isMeasure){//文字宽度只需获取一次就可以了
getTextWidth();
isMeasure=true;
}
}/**
*获取文字宽度
*/
privatevoidgetTextWidth(){
Paintpaint=this.getPaint();
Stringstr=this.getText().toString();
textWidth=(int)paint.measureText(str);
}
@Override
publicvoidrun(){
currentScrollX-=2;//滚动速度
scrollTo(currentScrollX,0);
if(isStop){
return;
}
if(getScrollX()<=-(this.getWidth())){
scrollTo(textWidth,0);
currentScrollX=textWidth;
//return;
}
postDelayed(this,5);
}
//开始滚动
publicvoidstartScroll(){
isStop=false;
this.removeCallbacks(this);
post(this);
}
//停止滚动
publicvoidstopScroll(){
isStop=true;
}
//从头开始滚动
publicvoidstartFor0(){
currentScrollX=0;
startScroll();
}
}布局文件:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="start"
android:text="走起"/>
<Buttonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="stop"android:text="停止"/><Buttonandroid:id="@+id/startfor0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="startFor0"android:text="从头开始"/><simtice.demo.marqueetext.MarqueeTextandroid:id="@+id/test"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#339320"android:ellipsize="marquee"android:singleLine="true"android:text="这才是真正的文字跑马灯效果这才是真正的字跑马灯效果这才是真正的"android:textColor="#000000"android:textSize="20dp"></simtice.demo.marqueetext.MarqueeText></LinearLayout>{privateMarqueeTexttest;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);test=(MarqueeText)this.findViewById(R.id.test);}publicvoidstart(Viewv){test.startScroll();}publicvoidstop(Viewv){test.stopScroll();}publicvoidstartFor0(Viewv){test.startFor0();}}