首页 热点资讯 义务教育 高等教育 出国留学 考研考公

android中能不能将图片弄成跑马灯的效果?

发布网友 发布时间:2022-04-20 04:18

我来回答

1个回答

热心网友 时间:2023-05-25 06:26

Android自带的跑马灯效果不太好控制,不能控制速度,不能即时停止和启动,而且还受焦点的影响蛋疼不已。由于项目需求需要用的可控制性高的跑马灯效果,所以自己写了一个自定义的TextView

  注意:在布局文件引用本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(C
ontext 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>MainActivitypublic 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();        }}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com