解决跑马灯不动问题

解决Android跑马灯不滚动问题

   首先来看一下请的布局吧:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/LayoutFFStyle"
    android:orientation="vertical" 
    android:background="#F6F4EE">
    
    <RelativeLayout 
        style="@style/LayoutFWStyle"
        android:layout_gravity="center_vertical"
        android:gravity="center_vertical"
        android:background="#EEEEEE"
        android:paddingTop="5dip"
        android:paddingBottom="5dip">
        
        <LinearLayout 
            style="@style/LayoutWFStyle"
            android:orientation="horizontal"
            android:layout_alignParentLeft="true"
            android:layout_margin="10dip">
            
            <TextView 
                android:layout_width="100dip"
                android:layout_height="wrap_content"
                android:textColor="#000000"
                android:text="顶顶顶顶顶顶顶顶的顶顶顶顶顶顶顶的"
                android:ellipsize="marquee"   
		android:focusable="true"   
		android:marqueeRepeatLimit="marquee_forever"   
		android:focusableInTouchMode="true"   
		android:scrollHorizontally="true"
                android:textSize="18sp"
                android:singleLine="true"
                android:layout_marginLeft="5dip"/>
            
            <TextView 
                android:id="@+id/search_result_list_item_percapita"
                style="@style/LayoutWWStyle"
                android:textColor="#000000"
                android:paddingLeft="5dip"
                android:textSize="18sp"
                android:gravity="center_vertical"/>
        </LinearLayout>
        
        <LinearLayout 
            style="@style/LayoutWFStyle"
            android:orientation="horizontal"
            android:layout_margin="10dip"
            android:layout_alignParentRight="true">
            
            <TextView 
                style="@style/LayoutWWStyle"
                android:gravity="center_vertical"
                android:paddingRight="5dip"
                android:text="386m"/>
            
            <ImageView 
                style="@style/LayoutWWStyle"
                android:layout_gravity="center_vertical"
                android:src="@drawable/arrow_right_gray"/>
        </LinearLayout>
    </RelativeLayout>

    <Gallery
        android:id="@+id/search_result_foot_gallery" 
        style="@style/LayoutFWStyle"
        android:paddingTop="10dip"
        android:paddingBottom="10dip"
        android:spacing="10dip"
        android:scrollbars="none"
        android:fadingEdge="none"
        android:unselectedAlpha="1"/>
</LinearLayout>
说明一下,我这个布局是在listview中item,在在adapter去引用的。那么这个页面看上去很复杂,跑马灯最后就不滚动了。我上网上去看了很多的资料,最后更具自己的理解总结了一下几种方法:

方法一

          <TextView
                android:layout_width="100dip"
                android:layout_height="wrap_content"
                android:textColor="#000000"
                android:text="顶顶顶顶顶顶顶顶的顶顶顶顶顶顶顶的"
                android:ellipsize="marquee"   
		android:focusable="true"
		android:marqueeRepeatLimit="marquee_forever"   
		android:focusableInTouchMode="true"   
		android:scrollHorizontally="true"
                android:textSize="18sp"
                android:singleLine="true"
                android:hapticFeedbackEnabled="true"
                android:layout_marginLeft="5dip">
                
                <requestFocus/>
         </TextView>

这种方法在我这种布局下不太靠谱,如果能够在引用这个布局问题文件中去设置焦点话应该可以用。但是我没有试过。

方法二、重写textview

package com.haodou.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

/**
 * 解决跑马灯不动的问题
 * @author pengjianbo <pengjianbo@haodou.com>
 * $Id$
 */
public class ScrollForeverTextView extends TextView {  
	   
    public ScrollForeverTextView(Context context) {  
        super(context);  
    }  
  
    public ScrollForeverTextView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    public ScrollForeverTextView(Context context, AttributeSet attrs,  
            int defStyle) {  
        super(context, attrs, defStyle);  
    }  
  
    @Override  
    public boolean isFocused() {  
        return true;  
    }  
  
}

         <com.haodou.widget.ScrollForeverTextView 
                android:layout_width="100dip"
                android:layout_height="wrap_content"
                android:textColor="#000000"
                android:text="顶顶顶顶顶顶顶顶的顶顶顶顶顶顶顶的"
                android:ellipsize="marquee"   
		android:focusable="true"   
		android:marqueeRepeatLimit="marquee_forever"   
		android:focusableInTouchMode="true"   
		android:scrollHorizontally="true"
                android:textSize="18sp"
                android:singleLine="true"
                android:layout_marginLeft="5dip"/>


方法三、

 

 import android.content.Context;  
 import android.graphics.Canvas;  
 import android.graphics.Paint;  
 import android.os.Parcel;  
 import android.os.Parcelable;  
 import android.util.AttributeSet;  
 import android.view.Display;  
 import android.view.View;  
 import android.view.WindowManager;  
 import android.view.View.OnClickListener;  
 import android.widget.TextView;  
   
 /** 
  * 单行文本跑马灯控件 
  * @author admin 
  * 
  */  
 public class AutoScrollTextView extends TextView implements OnClickListener {  
     public final static String TAG = AutoScrollTextView.class.getSimpleName();  
   
     private float textLength = 0f;// 文本长度  
     private float viewWidth = 0f;  
     private float step = 0f;// 文字的横坐标  
     private float y = 0f;// 文字的纵坐标  
     private float temp_view_plus_text_length = 0.0f;// 用于计算的临时变量  
     private float temp_view_plus_two_text_length = 0.0f;// 用于计算的临时变量  
     public boolean isStarting = false;// 是否开始滚动  
     private Paint paint = null;// 绘图样式  
     private CharSequence text = "";// 文本内容  
     private float speed = 0.5f;  
     private int textColor=0xFF000000;  
       
     public int getTextColor() {  
         return textColor;  
     }  
   
     public void setTextColor(int color) {  
         this.textColor = color;  
     }  
   
     public float getSpeed() {  
         return speed;  
     }  
   
     public void setSpeed(float speed) {  
         this.speed = speed;  
     }  
   
     public AutoScrollTextView(Context context) {  
         super(context);  
         initView();  
     }  
   
     public AutoScrollTextView(Context context, AttributeSet attrs) {  
         super(context, attrs);  
         initView();  
     }  
   
     public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {  
         super(context, attrs, defStyle);  
         initView();  
     }  
   
     /** */  
     /** 
      * 初始化控件 
      */  
     private void initView() {  
         setOnClickListener(this);  
     }  
   
     /** */  
     /** 
      * 文本初始化,每次更改文本内容或者文本效果等之后都需要重新初始化一下! 
      */  
     public void init(float width/*WindowManager windowManager*/) {  
         text=super.getText();  
         paint = super.getPaint();  
 //      Paint paint=new Paint();  
         text = getText().toString();  
         textLength = paint.measureText(text.toString());  
 //      viewWidth = getWidth();  
 //      if (viewWidth == 0) {  
 //          if (windowManager != null) {  
 //              Display display = windowManager.getDefaultDisplay();  
 //              viewWidth = display.getWidth();  
 //          }  
 //      }  
         viewWidth=width;  
         step = textLength;  
         temp_view_plus_text_length = viewWidth + textLength;  
         temp_view_plus_two_text_length = viewWidth + textLength * 2;  
         y = getTextSize() + getPaddingTop();  
         paint.setColor(textColor);  
     }  
   
     @Override  
     public Parcelable onSaveInstanceState() {  
         Parcelable superState = super.onSaveInstanceState();  
         SavedState ss = new SavedState(superState);  
   
         ss.step = step;  
         ss.isStarting = isStarting;  
   
         return ss;  
   
     }  
   
     @Override  
     public void onRestoreInstanceState(Parcelable state) {  
         if (!(state instanceof SavedState)) {  
             super.onRestoreInstanceState(state);  
             return;  
         }  
         SavedState ss = (SavedState) state;  
         super.onRestoreInstanceState(ss.getSuperState());  
   
         step = ss.step;  
         isStarting = ss.isStarting;  
   
     }  
   
     public static class SavedState extends BaseSavedState {  
         public boolean isStarting = false;  
         public float step = 0.0f;  
   
         SavedState(Parcelable superState) {  
             super(superState);  
         }  
   
         @Override  
         public void writeToParcel(Parcel out, int flags) {  
             super.writeToParcel(out, flags);  
             out.writeBooleanArray(new boolean[] { isStarting });  
             out.writeFloat(step);  
         }  
   
         public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() {  
   
             public SavedState[] newArray(int size) {  
                 return new SavedState[size];  
             }  
   
             @Override  
             public SavedState createFromParcel(Parcel in) {  
                 return new SavedState(in);  
             }  
         };  
   
         private SavedState(Parcel in) {  
             super(in);  
             boolean[] b = null;  
             in.readBooleanArray(b);  
             if (b != null && b.length > 0)  
                 isStarting = b[0];  
             step = in.readFloat();  
         }  
     }  
   
     /** */  
     /** 
      * 开始滚动 
      */  
     public void startScroll() {  
         isStarting = true;  
         invalidate();  
     }  
   
     /** */  
     /** 
      * 停止滚动 
      */  
     public void stopScroll() {  
         isStarting = false;  
         invalidate();  
     }  
   
     @Override  
     public void onDraw(Canvas canvas) {  
 //      super.onDraw(canvas);  
           
         canvas.drawText(text,0,text.length(), temp_view_plus_text_length - step, y, paint);  
         if (!isStarting) {  
             return;  
         }  
         step += speed;  
         if (step > temp_view_plus_two_text_length)  
             step = textLength;  
         invalidate();  
   
     }  
   
     @Override  
     public void onClick(View v) {  
         if (isStarting)  
             stopScroll();  
         else  
             startScroll();  
   
     }  
   
 } 
 marquee = (AutoScrollTextView) findViewById(R.id.marquee);  
 // marquee.setText(String.format(getResources().getString(R.string.marquee0),Consts.termno,"2010-12-28"));  
marquee.setText("上证指数3000.15 6.81(0.37%)深圳成指3000.15 6.81(0.37%)");  
 //marquee.setTextColor(0xffff0000);//注意:颜色必须在这里设置,xml中设置无效!默认黑色。  
//如果想改变跑马灯的文字内容或者文字效果,则在调用完setText方法之后,需要再调用一下init(width)方法,重新进行初始化和相关参数的计算。  
marquee.setSpeed(1.5f);  
 marquee.init(width);//width通常就是屏幕宽!  
marquee.startScroll();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值