自定义TextView实现跑马灯效果
[java]package c.x;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button mStartbButton;private Button mPauseButton;private Button mRestartbButton;private MarqueeText mMarqueeText;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}private void init(){mMarqueeText=(MarqueeText) findViewById(R.id.marqueeText);mStartbButton=(Button) findViewById(R.id.start_Button);mStartbButton.setOnClickListener(new OnClickListener() {public void onClick(View v) {mMarqueeText.startScroll();}});mPauseButton=(Button) findViewById(R.id.pause_Button);mPauseButton.setOnClickListener(new OnClickListener() {public void onClick(View v) {mMarqueeText.pauseScroll();}});mRestartbButton=(Button) findViewById(R.id.restart_Button);mRestartbButton.setOnClickListener(new OnClickListener() {public void onClick(View v) {mMarqueeText.restartScroll();}});}}MarqueeText如下:[java]package c.x;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.widget.TextView;/*** 需求描述:* TextView跑马灯的实现** 实现原理:* 通过不断的scrollTo()显示View中不同坐标处的内容**遇到的问题*1 注意scrollTo(int x, int y)* 移动View中内容,比如此处TextView中的文字.* x the x position to scroll to* y the y position to scroll to**2 scrollTo(int x, int y)的坐标问题* 参考资料:* http://www.open-open.com/lib/view/open1328834050046.html* 个人理解:* 该坐标为View中的内容的坐标.该坐标的起始点虽然在内容的左上角* 但是Y轴的正向是竖直向上的,X轴水平向右.* 该理解待于进一步验证.**/public class MarqueeText extends TextView implements Runnable {private int contentWidth=0;private int scrollToX=0;private boolean isStop=false;private boolean isRun=true;private boolean isMeasureContentWidth=false;public MarqueeText(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (!isMeasureContentWidth) {//获取文字长度Paint paint=this.getPaint();String content=this.getText().toString();contentWidth=(int) paint.measureText(content);isMeasureContentWidth=true;}}public void run() {if (isRun) {if (scrollToX>=contentWidth) {//重新开始scrollToX=-150;}scrollTo(scrollToX, 0);scrollToX=scrollToX+5;postDelayed(this, 150);}}// 点击开始,执行线程public void startScroll() {post(this);}// 点击暂停public void pauseScroll() {isRun=false;}// 点击重新开始public void restartScroll() {isRun=true;scrollToX=0;startScroll();}}main.xml如下:[html]<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" ><LinearLayoutandroid:id="@+id/linerLayout"android:layout_width="match_parent"android:layout_height补充:软件开发 , Java ,
上一个:Unicode 解码
下一个:java_main函数
- 更多JAVA疑问解答:
- java怎么在线读取ftp服务器上的文件内容
- 关于程序员的职业规划
- HTML和JSP矛盾吗?
- java小程序如何打包?
- java怎么split路径文件名?
- jsp+javaBean中Column 'ordersPrice' specified twice的错误
- Java TCP/IP Socket网络编程系列
- 大家来讨论一下我到底该用什么好?Swing 还是 JavaFX
- 关于Hibernate实体自身多对一的抓取问题
- 关于apache2+tomcat群集出现的问题
- spring 获取上下文问题
- SSH 导入导出excel 谁有这块的资料吗?
- Ext TreePanel 刷新问题
- springmvc 加载一个jsp页面执行多个方法 报404
- checkbox数组action怎么向页面传值