[转载]自定义TextView跑马灯效果实例教程 - 51CTO.COM

[转载]自定义TextView跑马灯效果实例教程 – 51CTO.COM.

注意:在布局文件引用本view时,paddingLeft,paddingRigh都必须为0dp,需要增加这两个属性的,大家可以自行修改代码。

Android:ellipsize=”marquee” Android:singleLine=”true” 这两个属性也要加上。

效果图:

    public class MarqueeText extends TextView implements Runnable { 
            private int currentScrollX;// 当前滚动的位置 
            private boolean isStop = false; 
            private int textWidth; 
            private boolean isMeasure = false; 
      
            public MarqueeText(Context context) { 
                    super(context); 
                    // TODO Auto-generated constructor stub 
            } 
      
            public MarqueeText(Context context, AttributeSet attrs) { 
                    super(context, attrs); 
            } 
      
            public MarqueeText(Context context, AttributeSet attrs, int defStyle) { 
                    super(context, attrs, defStyle); 
            } 
      
            @Override 
            protected void onDraw(Canvas canvas) { 
                    // TODO Auto-generated method stub 
                    super.onDraw(canvas); 
                    if (!isMeasure) {// 文字宽度只需获取一次就可以了 
                            getTextWidth(); 
                            isMeasure = true; 
                    } 
            } 
      
            /** 
             * 获取文字宽度 
             */ 
            private void getTextWidth() { 
                    Paint paint = this.getPaint(); 
                    String str = this.getText().toString(); 
                    textWidth = (int) paint.measureText(str); 
            } 
      
            @Override 
            public void run() { 
                    currentScrollX -= 2;// 滚动速度 
                    scrollTo(currentScrollX, 0); 
                    if (isStop) { 
                            return; 
                    } 
                    if (getScrollX() <= -(this.getWidth())) { 
                            scrollTo(textWidth, 0); 
                            currentScrollX = textWidth; 
    //                        return; 
                    } 
                    postDelayed(this, 5); 
            } 
      
            // 开始滚动 
            public void startScroll() { 
                    isStop = false; 
                    this.removeCallbacks(this); 
                    post(this); 
            } 
      
            // 停止滚动 
            public void stopScroll() { 
                    isStop = true; 
            } 
      
            // 从头开始滚动 
            public void startFor0() { 
                currentScrollX = 0; 
                startScroll(); 
            } 
    } 

布局文件:

    <LinearLayout xmlns: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="走起" /> 
      
        <Button 
            android:id="@+id/stop" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:onClick="stop" 
            android:text="停止" /> 
      
        <Button 
            android:id="@+id/startfor0" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:onClick="startFor0" 
            android:text="从头开始" /> 
      
        <simtice.demo.marqueetext.MarqueeText 
            android: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> 

MainActivity:

public class MainActivity extends Activity {
private MarqueeText test;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test = (MarqueeText) this.findViewById(R.id.test);
}

public void start(View v) {
test.startScroll();
}

public void stop(View v) {
test.stopScroll();
}
public void startFor0(View v){
test.startFor0();
}
}
[/Java]

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏