Android 横向滚动和纵向滚动的TextView

横向滚动TextView

TextView的横向滚动,本身自带的跑马灯效果+自定义一个简单的TextView即可实现.
自定义view代码如下:

public class HorizontalTextview extends TextView {
    public HorizontalTextview(Context context) {
        super(context);
    }

    public HorizontalTextview(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public HorizontalTextview(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean isFocused() {//返回 true 始终有焦点
        return true;
//        return super.isFocused();
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if (focused) {//当有焦点的时候 开启动画  没有的时候 什么都不做保持状态
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
        }
    }
}

然后在布局文件引入自定义的textview,添加这几个属性
android:focusable=”true”
android:focusableInTouchMode=”true”
android:ellipsize=”marquee”
android:marqueeRepeatLimit=”marquee_forever”

布局文件:

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context="com.mytest.MainActivity">


        <com.mytest.view.HorizontalTextview
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:layout_gravity="center_horizontal"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:singleLine="true"
            android:id="@+id/tv1"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="春眠不觉晓,处处蚊子咬" />

</LinearLayout> 

纵向滚动TextView

纵向滚动其实实现起来也没啥难度,ViewFlipper就可以很好的解决这个问题
布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context="com.mytest.MainActivity">


        <com.mytest.view.HorizontalTextview
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:layout_gravity="center_horizontal"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:singleLine="true"
            android:id="@+id/tv1"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="春眠不觉晓,处处蚊子咬" />

    <ViewFlipper
        android:layout_gravity="center_horizontal"
        android:id="@+id/myVf"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:autoStart="true"
        android:flipInterval="2000"
        android:inAnimation="@anim/in_bottomtop"
        android:outAnimation="@anim/out_bottomtop"/>

</LinearLayout>

然后在MainActivity里面的代码:

public class MainActivity extends AppCompatActivity {

    private ArrayList<String> titleList;
    private ViewFlipper myVf;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        main_notice = (FrameLayout) findViewById(R.id.fl_notice);
        myVf = (ViewFlipper) findViewById(R.id.myVf);
        titleList = new ArrayList();
        titleList.add("白日依山尽");
        titleList.add("黄河入海流");
        titleList.add("欲穷千里目");
        titleList.add("更上一层楼");
//        initRollNotice();


        for (int i = 0; i < titleList.size(); i++) {
            TextView textView = new TextView(this);
//            View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.view_notice_item, null);
//            TextView textView = (TextView) view.findViewById(R.id.notice_tv);
//            textView.setText(titleList.get(i));
            textView.setText(titleList.get(i));
            myVf.addView(textView);
        }
    }

}

横向和纵向的滚动都比较好实现,这里主要是记录下ViewFlipper
常用的方法;

setInAnimation      设置View进入屏幕时候使用的动画
setOutAnimation     设置View退出屏幕时候使用的动画
showPrevious        显示ViewFlipper里面的上一个View
showNext            显示ViewFlipper里面的下一个View
setFlipInterval     设置View之间切换的时间间隔
startFlipping       使用setFlipInterval方法设置的时间间隔来开始切换所有的View,切换会循环进行
stopFlipping        停止View切换
isFlipping          用来判断View切换是否正在进行
setDisplayedChild   切换到指定子View

常用的属性:

android:autoStart:   设置自动加载下一个View

android:flipInterval:设置View之间切换的时间间隔

android:inAnimation: 设置切换View的进入动画

android:outAnimation:设置切换View的退出动画

猜你喜欢

转载自blog.csdn.net/chenkaisq/article/details/81132953