android的跑马灯效果

学了一周的android,老想着来自己做个跑马灯的效果来看看,于是上网找了一些画图的资料,自己也摸索了一阵子,终于整个一个简单跑马灯的效果,留做纪念。

DrawPicActivity.java
public class DrawPicActivity extends Activity {
   
	testView tView = null;
	
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        tView = new testView(this);
        setContentView(tView);            
    }
}
testView.java
public class testView extends View implements Runnable{

	private Bitmap bitmap;
	private Paint m_paint;
	private int strLeft;
	
	public testView(Context context) {
		super(context);
		
		InputStream is = getResources().openRawResource(R.drawable.greenstar);
        BitmapDrawable bmpDraw = new BitmapDrawable(is);
        bitmap = bmpDraw.getBitmap();
            
        strLeft = 40;
        m_paint = new Paint();
        new Thread(this).start();
	}

	//获取字符串的宽度与高度
	Rect GetStringRect(String strText)
	{
		Rect rect  = new Rect();
		m_paint.getTextBounds(strText, 0, strText.length(), rect);
		return rect;
	}
	//跑马灯的效果
	void marquee(Canvas canvas, String txtStr)
	{
		String txtStr2 = txtStr.substring(0, txtStr.length()) ;
		
		Rect rect = GetStringRect(txtStr);		
		int len = txtStr.length();
		
		while((strLeft + rect.width() > 320) && (len > 0))
		{
			rect = GetStringRect(txtStr.substring(0, len));
			len -= 1;
		}
		
		m_paint.setColor(Color.RED);
		
		String txtLeft = txtStr.substring(0, len);
		if (!txtLeft.equals(""))
		{
			canvas.drawText(txtLeft,  strLeft, 40, m_paint);
			strLeft += 20;
		}
		else
		{
			strLeft = 40;
		}
		String txtRight = txtStr.substring(len, txtStr.length());
		if (!txtRight.equals(""))
		{
			canvas.drawText(txtRight, 20, 40, m_paint);
		}		
	}
	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);       
			
		marquee(canvas, "这是一个测试的例子");
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(!Thread.currentThread().isInterrupted())
		{
			try
			{
				Thread.sleep(100);
			}
			catch (Exception e) {
				// TODO: handle exception
				Thread.currentThread().interrupt();
			}
			postInvalidate();
		}
	}
	}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值