学了一周的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();
}
}
}