ListView中的TextView全部走马灯效果

郭梧悠
博客专家认证
2014-05-14 05:05:57
楼主查了好些方法,在别人提供的方法自己试了一下确实能实现字体全部滚动的效果;但是我现在的listView在所在的配置文件比较复杂,它的层次关系如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/program_detail_bg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:focusable="false" >

<ProgressBar
android:id="@+id/program_detail_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

<LinearLayout
android:id="@+id/detail_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingTop="@dimen/launcher_detail_padding_top" >

<LinearLayout
android:id="@+id/program_detail_wiki_info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:layout_marginBottom="@dimen/launcher_detail_margin"
android:orientation="vertical"
android:paddingLeft="@dimen/launcher_detail_padding"
android:paddingRight="@dimen/launcher_detail_padding" >
<!-- 节目标题 -->
<TextView
android:id="@+id/program_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/yellow"
android:textSize="@dimen/font_36" />

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<!-- 暂无数据 -->
<TextView
android:id="@+id/no_data1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/launcher_progran_detail_nodata"
android:textColor="@color/lighe_white"
android:textSize="@dimen/font_36"
android:visibility="gone" />

<LinearLayout
android:id="@+id/program_detail_wiki_info_particulars"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/launcher_detail_margin"
android:gravity="top"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/launcher_detail_margin1"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/program_detail_wiki_recommend"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/launcher_detail_margin2"
android:orientation="vertical"
android:focusable="false"
android:paddingLeft="@dimen/launcher_detail_padding"
android:paddingRight="@dimen/launcher_detail_padding" >

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- 节目预告 -->
<TextView
android:id="@+id/program_detail_reconmend_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@string/launcher_progran_detail_recomend_name"
android:textColor="@color/program_detail_wiki_title_type_color"
android:textSize="@dimen/font_35" />


</RelativeLayout>
</LinearLayout>

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<!-- 暂无节目预告信息 -->
<TextView
android:id="@+id/no_data2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/launcher_progran_detail_nodata1"
android:textColor="@color/lighe_white"
android:textSize="@dimen/font_36"
android:visibility="gone" />
<!-- 显示节目预告的数据ListView -->
<ListView
android:id="@+id/program_detail_listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/launcher_detail_listview_marginbottom"
android:layout_marginLeft="@dimen/launcher_detail_padding"
android:layout_marginRight="@dimen/launcher_detail_padding"
android:layout_marginTop="@dimen/launcher_detail_listview_margintop"
android:alwaysDrawnWithCache="true"
android:clickable="false"
android:focusable="true"
android:divider="@null"
android:dividerHeight="@dimen/launcher_detail_listview_scrollbar_divider"
android:fadeScrollbars="false"
android:fadingEdge="none"
android:listSelector="#00000000"
android:scrollbarFadeDuration="0"
android:scrollbarSize="@dimen/launcher_detail_listview_scrollbar_size"
android:scrollbarThumbVertical="@drawable/scroll_thum_selector"
android:scrollbarTrackVertical="@drawable/scroll_track_selector"
android:scrollbars="vertical"
android:scrollingCache="false" />
<!-- 按“返回键”回到我的空间 -->
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/launcher_detail_help_marginbottom"
android:layout_marginLeft="@dimen/launcher_detail_help_marginleft"
android:text="@string/launcher_progran_detail_back"
android:textColor="@color/help_color"
android:textSize="@dimen/font_17" />
</RelativeLayout>
</LinearLayout>

</RelativeLayout>

ListView的Item是一个个TextView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="100dp"

>
<!-- 节目名称 -->
<tv.huan.launcher.tcl.ui.ScrollForeverTextView
android:id="@+id/program_name"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:layout_width="300dp"
android:layout_height="100dp"
android:textSize="@dimen/font_24"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
/>
</LinearLayout>

ScrollForeverTextView继承了TextView重写了isFocused()方法,使之返回true,并且在adapter里面设置这个textView.setSelected(true)
但是没有跑马灯效果是怎么回事儿,求大神回答,问题困扰好久了。
...全文
319 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sollian 2014-05-20
  • 打赏
  • 举报
回复
我也遇到过这个问题,不太记得怎么搞得了。你试试去掉所有控件这两个属性 android:clickable android:focusable item的布局,给LinearLayout加一个属性: android:descendantFocusability="blocksDescendants" 我也不知道行不行,试试吧。
郭梧悠 2014-05-19
  • 打赏
  • 举报
回复
引用 9 楼 gaoshanvd321 的回复:
<com.atool.ui.AlwaysMarqueeTextView android:id="@+id/tvContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="12345678901234567890 " />
不行
夕阳下的高山 2014-05-17
  • 打赏
  • 举报
回复
<com.atool.ui.AlwaysMarqueeTextView android:id="@+id/tvContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="12345678901234567890 " />
映映 2014-05-17
  • 打赏
  • 举报
回复
必须要获取焦点才能实现跑马灯,可以强制每个textview获取焦点啊
郭梧悠 2014-05-16
  • 打赏
  • 举报
回复
郭梧悠 2014-05-16
  • 打赏
  • 举报
回复
引用 4 楼 jack_wolf_ 的回复:
public class AlwaysMarqueeTextView extends TextView { public AlwaysMarqueeTextView(Context context) { super(context); } public AlwaysMarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); } public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } // 始终返回true,即一直获得焦点 @Override public boolean isFocused() { return true; } } <com.atool.ui.AlwaysMarqueeTextView android:id="@+id/tvContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="12345678901234567890 " /> 这个是我写的
现在的情况是只有获取焦点的时候才能实现跑马灯,我要的效果是每一个TextView都实现跑马灯
郭梧悠 2014-05-16
  • 打赏
  • 举报
回复
引用 4 楼 jack_wolf_ 的回复:
public class AlwaysMarqueeTextView extends TextView { public AlwaysMarqueeTextView(Context context) { super(context); } public AlwaysMarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); } public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } // 始终返回true,即一直获得焦点 @Override public boolean isFocused() { return true; } } <com.atool.ui.AlwaysMarqueeTextView android:id="@+id/tvContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="12345678901234567890 " /> 这个是我写的
你这种方法我试过了不行,不过有一种情况可以行的通,就是把我上面的那个xml文件里ListView所在的RelativeLayout上面的那些空间都去掉,也即是只剩下<RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <!-- 暂无节目预告信息 --> <TextView /> <!-- 显示节目预告的数据 --> <ListView android:id="@+id/program_detail_listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/launcher_detail_listview_marginbottom" android:layout_marginLeft="@dimen/launcher_detail_padding" android:layout_marginRight="@dimen/launcher_detail_padding" android:layout_marginTop="@dimen/launcher_detail_listview_margintop" android:alwaysDrawnWithCache="true" android:clickable="false" android:focusable="true" android:divider="@null" android:dividerHeight="@dimen/launcher_detail_listview_scrollbar_divider" android:fadeScrollbars="false" android:fadingEdge="none" android:listSelector="#00000000" android:scrollbarFadeDuration="0" android:scrollbarSize="@dimen/launcher_detail_listview_scrollbar_size" android:scrollbarThumbVertical="@drawable/scroll_thum_selector" android:scrollbarTrackVertical="@drawable/scroll_track_selector" android:scrollbars="vertical" android:scrollingCache="false" /> <!-- 按“返回键”回到我的空间 --> <TextView" /> </RelativeLayout>这种情况下,可以实现跑马灯效果,但是加上上面的东西就不会出现跑马灯效果
映映 2014-05-16
  • 打赏
  • 举报
回复
public class AlwaysMarqueeTextView extends TextView { public AlwaysMarqueeTextView(Context context) { super(context); } public AlwaysMarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); } public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } // 始终返回true,即一直获得焦点 @Override public boolean isFocused() { return true; } } <com.atool.ui.AlwaysMarqueeTextView android:id="@+id/tvContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="12345678901234567890 " /> 这个是我写的
郭梧悠 2014-05-16
  • 打赏
  • 举报
回复
引用 2 楼 WUshuaijun1 的回复:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" > <LinearLayout > <ProgressBar/> </LinearLayout> <LinearLayout > <LinearLayout> <!-- 节目标题 --> <TextView /> <RelativeLayout> <!-- 暂无数据 --> <TextView/> <LinearLayout > <LinearLayout > <!-- 海报 --> <ImageView/> </LinearLayout> <LinearLayout > <LinearLayout> <TextView/> <!-- 主演 --> <TextView/> </LinearLayout> <LinearLayout > <TextView/> <!-- 类型 --> <TextView /> </LinearLayout> <FrameLayout > <TextView > <!-- 简介 --> <TextView/> </FrameLayout> </LinearLayout> </LinearLayout> </RelativeLayout> </LinearLayout> <LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- 节目预告 --> <TextView /> <LinearLayout > <!-- 节目预告后面的图片 --> <ImageView/> </LinearLayout> </RelativeLayout> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <!-- 暂无节目预告信息 --> <TextView /> <!-- 显示节目预告的数据 --> <ListView android:id="@+id/program_detail_listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/launcher_detail_listview_marginbottom" android:layout_marginLeft="@dimen/launcher_detail_padding" android:layout_marginRight="@dimen/launcher_detail_padding" android:layout_marginTop="@dimen/launcher_detail_listview_margintop" android:alwaysDrawnWithCache="true" android:clickable="false" android:focusable="true" android:divider="@null" android:dividerHeight="@dimen/launcher_detail_listview_scrollbar_divider" android:fadeScrollbars="false" android:fadingEdge="none" android:listSelector="#00000000" android:scrollbarFadeDuration="0" android:scrollbarSize="@dimen/launcher_detail_listview_scrollbar_size" android:scrollbarThumbVertical="@drawable/scroll_thum_selector" android:scrollbarTrackVertical="@drawable/scroll_track_selector" android:scrollbars="vertical" android:scrollingCache="false" /> <!-- 按“返回键”回到我的空间 --> <TextView" /> </RelativeLayout> </LinearLayout> </RelativeLayout>
大神,你这是?
乐逍遥二 2014-05-15
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" > <LinearLayout > <ProgressBar/> </LinearLayout> <LinearLayout > <LinearLayout> <!-- 节目标题 --> <TextView /> <RelativeLayout> <!-- 暂无数据 --> <TextView/> <LinearLayout > <LinearLayout > <!-- 海报 --> <ImageView/> </LinearLayout> <LinearLayout > <LinearLayout> <TextView/> <!-- 主演 --> <TextView/> </LinearLayout> <LinearLayout > <TextView/> <!-- 类型 --> <TextView /> </LinearLayout> <FrameLayout > <TextView > <!-- 简介 --> <TextView/> </FrameLayout> </LinearLayout> </LinearLayout> </RelativeLayout> </LinearLayout> <LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- 节目预告 --> <TextView /> <LinearLayout > <!-- 节目预告后面的图片 --> <ImageView/> </LinearLayout> </RelativeLayout> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <!-- 暂无节目预告信息 --> <TextView /> <!-- 显示节目预告的数据 --> <ListView android:id="@+id/program_detail_listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/launcher_detail_listview_marginbottom" android:layout_marginLeft="@dimen/launcher_detail_padding" android:layout_marginRight="@dimen/launcher_detail_padding" android:layout_marginTop="@dimen/launcher_detail_listview_margintop" android:alwaysDrawnWithCache="true" android:clickable="false" android:focusable="true" android:divider="@null" android:dividerHeight="@dimen/launcher_detail_listview_scrollbar_divider" android:fadeScrollbars="false" android:fadingEdge="none" android:listSelector="#00000000" android:scrollbarFadeDuration="0" android:scrollbarSize="@dimen/launcher_detail_listview_scrollbar_size" android:scrollbarThumbVertical="@drawable/scroll_thum_selector" android:scrollbarTrackVertical="@drawable/scroll_track_selector" android:scrollbars="vertical" android:scrollingCache="false" /> <!-- 按“返回键”回到我的空间 --> <TextView" /> </RelativeLayout> </LinearLayout> </RelativeLayout>
郭梧悠 2014-05-14
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" >

    <LinearLayout >

        <ProgressBar/>
    </LinearLayout>

    <LinearLayout >

        <LinearLayout>
            <!-- 节目标题 -->
            <TextView />

            <RelativeLayout>
                <!-- 暂无数据 -->
                <TextView/>

                <LinearLayout >

                    <LinearLayout >
                        <!-- 海报 -->
                        <ImageView/>
                    </LinearLayout>

                    <LinearLayout >

                        <LinearLayout>
                              
                            <TextView/>
                            <!-- 主演 -->
                            <TextView/>
                        </LinearLayout>

                        <LinearLayout >

                            <TextView/>
                             <!-- 类型 -->
                            <TextView />
                        </LinearLayout>

                        <FrameLayout >

                            <TextView >
                            <!-- 简介 -->
                            <TextView/>
                        </FrameLayout>
                    </LinearLayout>
                </LinearLayout>
            </RelativeLayout>
        </LinearLayout>

        <LinearLayout>

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >
                <!-- 节目预告 -->
                <TextView />

                <LinearLayout >
                    <!-- 节目预告后面的图片 -->
                    <ImageView/>
                </LinearLayout>
            </RelativeLayout>
        </LinearLayout>

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
            <!-- 暂无节目预告信息 -->
            <TextView />
            <!-- 显示节目预告的数据 -->
            <ListView
                android:id="@+id/program_detail_listview"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="@dimen/launcher_detail_listview_marginbottom"
                android:layout_marginLeft="@dimen/launcher_detail_padding"
                android:layout_marginRight="@dimen/launcher_detail_padding"
                android:layout_marginTop="@dimen/launcher_detail_listview_margintop"
                android:alwaysDrawnWithCache="true"
                android:clickable="false"
                android:focusable="true"
                android:divider="@null"
                android:dividerHeight="@dimen/launcher_detail_listview_scrollbar_divider"
                android:fadeScrollbars="false"
                android:fadingEdge="none"
                android:listSelector="#00000000"
                android:scrollbarFadeDuration="0"
                android:scrollbarSize="@dimen/launcher_detail_listview_scrollbar_size"
                android:scrollbarThumbVertical="@drawable/scroll_thum_selector"
                android:scrollbarTrackVertical="@drawable/scroll_track_selector"
                android:scrollbars="vertical"
                android:scrollingCache="false" />
             <!-- 按“返回键”回到我的空间 -->
            <TextView" />
        </RelativeLayout>
    </LinearLayout>

</RelativeLayout>
补充这个ListView所在的xml文件的架构

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧