今天在做类似播放器的东西,期间遇到了界面更新小问题,纠结了1个多钟才最终想通了,所以在这里写点东西纪录一下,希望以后遇到类似问题,

我一分钟就可以解决。


我的界面中,里面包含了一个具有“跑马灯“效果的TextView(简称MarqueeTextView)。MarqueeTextView的前面是个也是一个显示音乐播放

时间的TextView(简称TimeView)。MarqueeTextView在音乐播放时匀速的移动,而TimeView每隔1秒都会被调用一次setText()来更新音乐

播放的时间进度。


程序在实际运行过程中,MarqueeTextView的移动时出现了"突然移动一大截又马上恢复正常”的现象。于是乎,我的纠结开始了。


纠结1:是不是UI线程做了太多耗时操作。

查UI线程耗时操作,我是通过“代码翻阅”和“输出代码执行时间”来完成的(不知道CSDN的大神们是否更牛B的想法);最终发现怀疑代码都

在合理范围内,差一点我就想写一个SurfaceView来试试了。


纠结2:是不是Layout文件没写好。

这正是问题所在了,TimeView是WRAP_CONTENT的,而MarqueeTextView是FILL_PARENT的。android.view.TextView在被调用setText这个函数的时候,

应该是先触发setText(""),然后setText("实际内容")。这样TimeView有小段时间width是为0的。所MarqueeTextView根据FILL_PARENT的特性会

在TimeView为0的时候撑开,然后又马上缩小了。所以这样就产生了以上现象。


以下是问题布局:

           <TextView                android:id="@+id/text_view_time"                android:layout_width="wrap_content"        // 问题所在。最终改为固定宽度。                android:layout_height="32dp"                android:layout_centerVertical="true"                android:layout_marginLeft="48dp"                android:gravity="center"                android:text="00:00/00:00"                android:textColor="@color/white"                android:textSize="20dp" />            <RelativeLayout                android:layout_width="fill_parent"                          android:layout_height="32dp"                android:layout_alignParentRight="true"                android:layout_centerVertical="true"                android:layout_marginRight="32dp"                android:layout_toRightOf="@+id/text_view_time"                android:paddingLeft="16dp" >                <com.itap.voiceemoticon.widget.MarqueeTextView                    android:id="@+id/text_view_music_title_slide"                    android:layout_width="fill_parent"                    android:layout_height="wrap_content"                    android:layout_centerInParent="true"                    android:ellipsize="none"                    android:focusable="true"                    android:focusableInTouchMode="true"                    android:gravity="center_vertical"                    android:marqueeRepeatLimit="marquee_forever"                    android:scrollHorizontally="true"                    android:singleLine="true"                    android:text=""                    android:textColor="@color/white"                    android:textSize="18dp" />            </RelativeLayout>




更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. android EditText设置不可写
  3. android 使用html5作布局文件: webview跟javascript交互
  4. android studio调试c/c++代码
  5. IM-A820L限制GSM,WCDMA上网的原理(其他泛泰机型可参考)7.13
  6. 锁屏界面
  7. 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
  8. android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序
  9. Android(安卓)version and Linux Kernel version

随机推荐

  1. Android(安卓)SDK Document 框架导读的翻
  2. Android异步处理
  3. 如何将android view的位置设为右下角
  4. android 获取versionName和versionCode以
  5. android应用程序基本原理
  6. Android(安卓)系列 2.8在Android应用程序
  7. [转] 有关Android线程的学习
  8. Android启动(1)启动过程概述
  9. Android(安卓)Studio 4.0.0的介绍
  10. Android(安卓)你应该知道的学习资源 进阶