AndroidTextview跑马灯横向滚动

原理:自定义textview

源码:http://download.csdn.net/detail/lm_zp/9517135

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"
    tools:context=".MainActivity" >

    <com.bwie.androidtest.AutoText   
        android:id="@+id/autoTxt"    
        android:layout_width="match_parent"    
        android:layout_height="wrap_content"    
        android:background="#ffffff"    
        android:textColor="#00ff00"    
        android:textSize="35sp" />  


</RelativeLayout>
自定义textview

AutoText.java

package com.bwie.androidtest;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
import android.widget.TextView;

public class AutoText extends TextView {

	private int width, height;
	private Paint paintText;
	private float posx, posy;
	private float speed = 0.0f;
	private String text = "hello haha";
	private float textWidth = 0;
	private float moveDistance = 0.0f;
	private boolean isStarting = false;

	public AutoText(Context context) {
		super(context);

	}

	public AutoText(Context context, AttributeSet attrs) {
		super(context, attrs);

	}

	private void initView() {
		paintText = new Paint();
		//字体大小
		paintText.setTextSize(50.0f);
		//字体颜色
		paintText.setColor(Color.BLACK);
		paintText.setTypeface(Typeface.DEFAULT_BOLD);
		paintText.setAntiAlias(true);
		text = getText().toString();
		textWidth = paintText.measureText(text);
		Log.e("msg", "textWidth= " + textWidth);
		this.speed = textWidth;
		moveDistance = textWidth * 2 + width;
	}

	public void initDisplayMetrics(WindowManager windowManager) {
		/* 取得屏幕分辨率大小 */
		DisplayMetrics dm = new DisplayMetrics();
		windowManager.getDefaultDisplay().getMetrics(dm);
		this.width = dm.widthPixels;
		this.height = dm.heightPixels;

		initView();
		this.posx = width + textWidth;
		FontMetrics fm = paintText.getFontMetrics();
		float baseline = fm.descent - fm.ascent;
		//字体显示高度
		this.posy = height / 2 - baseline;
	}

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

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

	@Override
	protected void onDraw(Canvas canvas) {
		// super.onDraw(canvas);
		canvas.drawText(text, posx - speed, posy, paintText);
		if (!isStarting) {
			return;
		}
		speed += 2.0f;
		if (speed > moveDistance)
			speed = textWidth;
		invalidate();
	}

}

MainActivity.java

package com.bwie.androidtest;

import android.os.Bundle;
import android.app.Activity;
import android.text.TextUtils.TruncateAt;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
	String str11 = "促进青年教师全面发展,\n引导广大高校青年教师为实现中华民族伟大复兴的中国梦贡献力" + "\n"
			+ "促进青年教师全面发展,\n引导广大高校青年教师为实现中华民族伟大复兴的中国梦贡献力" + "\n"
			+ "  djsdnh   kshdfjks     \n\r\t ";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		scroll3();
	}

	void scroll3() {
		AutoText auto = (AutoText) findViewById(R.id.autoTxt);
		auto.setText(str11);
		//传递屏幕宽度
		auto.initDisplayMetrics(getWindowManager());
		//开始
		auto.startScroll();
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中,可以通过设置TextView的一些属性来实现跑马灯效果。其中包括设置ellipsize属性为marquee,marqueeRepeatLimit属性为marquee_forever,focusable属性为true,singleLine属性为true等。通过这些属性的设置,可以让TextView的文字在有限的宽度下实现跑马灯效果,让用户完整地看到所有的文字。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Android——TextView实现真正的跑马灯效果](https://blog.csdn.net/u013836857/article/details/51423393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Android TextView设置跑马灯效果](https://blog.csdn.net/qq_43278826/article/details/122668992)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Android三种方式实现TextView跑马灯效果](https://blog.csdn.net/qq_26440221/article/details/52621302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值