<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-348  評(píng)論-598  文章-0  trackbacks-0
    先說(shuō)聲 大家新年快樂(lè)哈,明天就要進(jìn)入2010年了,對(duì)我來(lái)說(shuō)是很意義的一年,同時(shí)也是很重要的一年。新的氣象,新的工作,新的挑戰(zhàn)。保佑自己,相信自己!不啰嗦了,切入正題。

    最近在開(kāi)發(fā)一個(gè)應(yīng)用,需要用到文本的跑馬燈效果,圖省事,在網(wǎng)上找,但老半天都找不到,后來(lái)自己寫(xiě)了一個(gè),很簡(jiǎn)單,代碼如下:
    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;

    /**
     * 
     * TODO 單行文本跑馬燈控件
     *
     * 
    @author tianlu
     * 
    @version 1.0
     * Create At : 2010-2-16 下午09:35:03
     
    */

    public class AutoScrollTextView extends TextView implements OnClickListener {
        
    public final static String TAG = AutoScrollTextView.class.getSimpleName();
        
        
    private float textLength = 0f;//文本長(zhǎng)度
        private float viewWidth = 0f;
        
    private float step = 0f;//文字的橫坐標(biāo)
        private float y = 0f;//文字的縱坐標(biāo)
        private float temp_view_plus_text_length = 0.0f;//用于計(jì)算的臨時(shí)變量
        private float temp_view_plus_two_text_length = 0.0f;//用于計(jì)算的臨時(shí)變量
        public boolean isStarting = false;//是否開(kāi)始滾動(dòng)
        private Paint paint = null;//繪圖樣式
        private String text = "";//文本內(nèi)容

        
        
    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);
        }

        
        
    /**
         * 文本初始化,每次更改文本內(nèi)容或者文本效果等之后都需要重新初始化一下
         
    */

        
    public void init(WindowManager windowManager)
        
    {
            paint 
    = getPaint();
            text 
    = getText().toString();
            textLength 
    = paint.measureText(text);
            viewWidth 
    = getWidth();
            
    if(viewWidth == 0)
            
    {
                
    if(windowManager != null)
                
    {
                    Display display 
    = windowManager.getDefaultDisplay();
                    viewWidth 
    = display.getWidth();
                }

            }

            step 
    = textLength;
            temp_view_plus_text_length 
    = viewWidth + textLength;
            temp_view_plus_two_text_length 
    = viewWidth + textLength * 2;
            y 
    = getTextSize() + getPaddingTop();
        }

        
        @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();
            }

        }


        
    /**
         * 開(kāi)始滾動(dòng)
         
    */

        
    public void startScroll()
        
    {
            isStarting 
    = true;
            invalidate();
        }

        
        
    /**
         * 停止?jié)L動(dòng)
         
    */

        
    public void stopScroll()
        
    {
            isStarting 
    = false;
            invalidate();
        }

        

        @Override
        
    public void onDraw(Canvas canvas) {
            canvas.drawText(text, temp_view_plus_text_length 
    - step, y, paint);
            
    if(!isStarting)
            
    {
                
    return;
            }

            step 
    += 0.5;
            
    if(step > temp_view_plus_two_text_length)
                step 
    = textLength;
            invalidate();

        }


        @Override
        
    public void onClick(View v) {
            
    if(isStarting)
                stopScroll();
            
    else
                startScroll();
            
        }


    }

    實(shí)現(xiàn)了寬度的判斷,文本自動(dòng)滾動(dòng)及開(kāi)始和停止?jié)L動(dòng)等功能。

    在UI xml中的配置如下:
        <cn.tigertian.ui.AutoScrollTextView android:id="@+id/TextViewNotice"
            android:layout_height
    ="30px" android:layout_width="fill_parent"
            android:text
    ="@string/test_notice_1" android:textColor="#000" android:inputType="text"
            android:background
    ="#EEE" android:textSize="20px"></cn.tigertian.ui.AutoScrollTextView>

    在Activity中的使用方法如下:
            //啟動(dòng)公告滾動(dòng)條
            autoScrollTextView = (AutoScrollTextView)findViewById(R.id.TextViewNotice);
            autoScrollTextView.init(getWindowManager());
            autoScrollTextView.startScroll();
    如果想改變跑馬燈的文字內(nèi)容或者文字效果,則在調(diào)用完setText方法之后,需要再調(diào)用一下init(WindowManager windowManager)方法,重新進(jìn)行初始化和相關(guān)參數(shù)的計(jì)算。


    ---------------------------------------------------------
    專(zhuān)注移動(dòng)開(kāi)發(fā)

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2010-02-13 14:35 TiGERTiAN 閱讀(10689) 評(píng)論(17)  編輯  收藏 所屬分類(lèi): JavaAndroid

    評(píng)論:
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-02-13 16:40 | altchen
    請(qǐng)問(wèn)下性能如何?不斷的invalidate->onDraw  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-02-13 16:42 | TiGERTiAN
    @altchen
    性能么得什么降低,跑馬燈實(shí)現(xiàn)都是要不斷重繪的,不可避免。  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-05-18 15:40 | herbertD
    請(qǐng)問(wèn)一下,怎么才能改變textColor? 我設(shè)置的gravity="center"也不起作用,是為什么呢? 謝謝@TiGERTiAN
      回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-05-18 15:41 | herbertD
    我顯示的文字顯示一直是黑色的,不知道想顯示為紅色如何寫(xiě)代碼?謝謝!@herbertD
      回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-05-18 15:43 | TiGERTiAN
    @herbertD
    gravity="center" 這個(gè)加的沒(méi)有意義,因?yàn)槭钦袧L動(dòng)。
    改顏色你需要把XML中該控件的配置信息中的textColor改一下,看我文章的下面xml示例  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-05-19 09:23 | herbertD
    Hi, 我改了android:textColor="B11",想改為紅色,但是顏色沒(méi)有改變,我改了android:background="#EEE",為"#11B",背景變?yōu)樗{(lán)色了,很奇怪,呵呵 
      回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-05-19 09:31 | herbertD
    p.s 我在init() 中, this.setTextColor(0xffff0000)也不起作用,謝謝!  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-05-19 09:33 | TiGERTiAN
    @herbertD
    B11前面少了個(gè)#  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-05-19 09:33 | TiGERTiAN
    @herbertD
    這個(gè)只是設(shè)置一下,改顏色要靠Paint  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-05-19 11:27 | herbertD


    paint.setColor(0xff00bb00);

    搞定了:)

    Thanks!!  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2010-09-16 21:40 | ixihaha
    強(qiáng)悍謝了  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2011-09-18 22:57 | 羅曉雁
    在Activity中的代碼寫(xiě)到哪里呢?  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2011-10-11 21:10 | 濟(jì)南-mu
    博主你好 為什么 我在模擬器上運(yùn)行,文字的滾動(dòng)效果 并不均勻呢?不是 平滑的滾動(dòng)!  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2013-01-22 16:19 | 麻倉(cāng)葉
    在代碼里面改 代碼里面他沒(méi)處理字體顏色,init()里面加個(gè) paint.setColor(Color.RED); 就行了@herbertD
      回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件)[未登錄](méi) 2014-05-14 10:04 | et
    好像會(huì)報(bào)空指針異常啊,有沒(méi)有人遇到  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2014-08-16 10:12 | ptt
    做不成功啊  回復(fù)  更多評(píng)論
      
    # re: Android文字跑馬燈控件(文本自動(dòng)滾動(dòng)控件) 2015-12-08 15:31 | 學(xué)鳥(niǎo)
    如何讓滾動(dòng)的速度快一點(diǎn)啊??  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 女人与禽交视频免费看| 色视频色露露永久免费观看 | 好久久免费视频高清| 亚洲av无码av制服另类专区| 97青青草原国产免费观看| 国产成人亚洲合集青青草原精品 | 亚洲精品福利在线观看| 女人张腿给男人桶视频免费版| 免费的黄网站男人的天堂| 久久亚洲国产精品一区二区| 91嫩草国产在线观看免费| 一级特黄a大片免费| 久久亚洲熟女cc98cm| 国产美女无遮挡免费网站| 日韩电影免费在线观看| 一道本不卡免费视频| 亚洲色av性色在线观无码| 婷婷亚洲天堂影院| 国产卡二卡三卡四卡免费网址| 特级做a爰片毛片免费看| 亚洲熟妇久久精品| 亚洲精品视频免费看| 国产亚洲成人久久| 亚洲 国产 图片| 噜噜嘿在线视频免费观看| 91人成网站色www免费下载| eeuss免费影院| 无码人妻一区二区三区免费视频| 亚洲国产成人精品无码一区二区 | 国产精品成人免费视频网站京东| 99免费精品视频| aa级女人大片喷水视频免费| 亚洲精品乱码久久久久久按摩| 国产精品视_精品国产免费| 拨牐拨牐x8免费| 18禁超污无遮挡无码免费网站国产| 1a级毛片免费观看| 99精品国产成人a∨免费看| a级毛片毛片免费观看永久| 青柠影视在线观看免费高清| 国产精品九九久久免费视频|