Android实现字幕滚动程序并优化

本文介绍如何在Android环境中实现字幕滚动效果,并探讨了相关的优化策略。通过创建自定义控件,结合按钮和输入框,实现了滚动字幕功能,同时详细说明了自定义控件的包名设置步骤。
摘要由CSDN通过智能技术生成
  Android实现字幕滚动,不使用内置的属性,而是重新定义一个类继承自AppCompatTextView来实现,可以控制文字滚动速度且让其匀速滚动,首先定义一个方法 得到屏幕宽度和文本长度
public void scrollTextView(WindowManager windowManager, String text) {
        // 获取画笔paint
        paint = this.getPaint();
        //paint.setColor(Color.BLACK);
        //使用抗锯齿效果,使文本更加平滑
        paint.setSubpixelText(true);
        paint.setAntiAlias(true);
        //设置文字大小和颜色
        paint.setTextSize(50);
        this.setTextColor(Color.BLACK);
        // 得到文字
        this.text = text;
        textLength = paint.measureText(text);// 获得当前文本字符串长度
        viewWidth = this.getWidth();// 获取view的宽度;
        if (viewWidth == 0) {
            if (windowManager != null) {
                // 获取当前屏幕的属性
                Display display = windowManager.getDefaultDisplay();
                Point size = new Point();
                display.getSize(size);
                viewWidth = size.x;// 获取屏幕宽度
            }
        }
        xPos = textLength;
        currentLength = viewWidth + textLength;
        changeLength = viewWidth + textLength * 2;// 使文字到最左边
        // 文字的大小+距顶部的距离
        yPos = this.getTextSize() + this.getPaddingTop();
    }
  重写onDraw方法
@Override
    protected void onDraw(Canvas canvas) {
        /**
         * 两次进入onDraw函数的时间间隔
         */
        time1 =System.currentTimeMillis();
        if (time2!=0){
        timeDesc=time1-time2;
        }
        speed=getSpeed();
        TIME=getTIME();
        //文字从最右边开始滚动
        if (isStarting) {
            canvas.drawColor(Color.WHITE);
            canvas.drawText(text, currentLength - xPos, yPos, paint);
            //每次滚动速度
            if (timeDesc!=0){
                if (TIME!=0){
                xPos += speed/TIME*timeDesc;//根据时间差计算滚动距离
                }
                else {
                    xPos =xPos+ 0;
                }
            }
            else {
                xPos += speed;
            }
            // 当文字滚动到屏幕的最左边
            if (xPos >= changeLength) {//最后一个文字到达最左边时
                // 把文字设置到最右边开始
                xPos = currentLength - viewWidth;
            }

        }
        time2 = time1;
        super.onDraw(canvas);
    }
然后在 MainActivity中实现一个定时器 ,控制刷新时间
Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            // handler自带方法实现定时器
            try {
                handler.postDelayed(this, TIME);
                marquee.invalidate();

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
MainActivity 中的onCreate方法控制刷新时
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值