需求:每个 item 内容里面有 TextView,滑动到具体 item 的时候,需要 TextView 自动滚动。

下面是实现的效果图:

github 下载地址:https://github.com/wuqingsen/TextViewRollWu

csdn 下载地址:https://download.csdn.net/download/wuqingsen1/11594614

下面是具体代码:

首先在 MainActivity 中加入 Timer ,Handler 以及实现 TextView 的滑动,主要代码都在 MainActivity 中:

import android.content.pm.ActivityInfo;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;public class MainActivity extends AppCompatActivity {RecyclerView recyclerView;private ArrayList<String> listRoll;int height = 10;private TextView tv_content;private int textHeight = 0;private Timer timer;private Handler handler;private TimerTask timerTask;private int delayTime = 100;private int priodTime = 50;@RequiresApi(api = Build.VERSION_CODES.M)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);setAdapter();handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 1) {if (tv_content != null) {tv_content.scrollTo(0, height + 2);height = height + 2;} else {stopTimer();}}}};}private void setAdapter() {recyclerView = findViewById(R.id.recyclerView);listRoll = new ArrayList<>();listRoll.add("色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分");listRoll.add("傅撒旦傅撒旦发射射点手动阀十分色发射点法大手动阀十分");listRoll.add("手动阀十分色色发射点法大师手动阀十分色色发射点法大师傅撒旦发射点色发射点法大师傅撒旦发射点发射点发射点手动阀十分色色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分傅撒旦发射点色发射点法大师傅撒旦发射点发射点发射点手动阀十分色色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分");listRoll.add("色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分");listRoll.add("色发射点法大师傅撒旦发射点发射手动阀十分色色发射点法大师傅撒旦发射点色发射点法大师傅撒旦发射点发射点发射点手动阀十分色色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分手动阀十分色色发射点法大师傅撒旦发射点色发射点法大师傅撒旦发射点发射点发射点手动阀十分色色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分手动阀十分色色发射点法大师傅撒旦发射点色发射点法大师傅撒旦发射点发射点发射点手动阀十分色色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分");listRoll.add("色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分色发射点法大师傅撒旦发射点发射点发射点手动阀十分");MyAdapter myAdapter = new MyAdapter(listRoll);recyclerView.setAdapter(myAdapter);recyclerView.setLayoutManager(new LinearLayoutManager(this));myAdapter.setmOnItemClickListerer(new MyAdapter.OnItemClickListener() {@RequiresApi(api = Build.VERSION_CODES.M)@Overridepublic void onItemClick(String type, int position, TextView textView) {if (type.equals("start")) {stopTimer();startTimer(textView);} else if (type.equals("stop")) {stopTimer();}}});}@RequiresApi(api = Build.VERSION_CODES.M)private void startTimer(final TextView textView) {tv_content = textView;textView.setMovementMethod(ScrollingMovementMethod.getInstance());textHeight = tv_content.getMeasuredHeight();//高度textView.setOnScrollChangeListener(new View.OnScrollChangeListener() {@Overridepublic void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {if (textHeight > oldScrollY) {ViewGroup.LayoutParams params = tv_content.getLayoutParams();params.height = textHeight - oldScrollY;tv_content.setLayoutParams(params);}}});if (timerTask == null) {timerTask = new TimerTask() {public void run() {Message message = new Message();message.what = 1;handler.sendMessage(message);}};}if (timer == null) {timer = new Timer(true);}if (timer != null && timerTask != null) {timer.schedule(timerTask, delayTime, priodTime);}}private void stopTimer() {if (tv_content != null) {ViewGroup.LayoutParams params = tv_content.getLayoutParams();params.height = textHeight;tv_content.setLayoutParams(params);tv_content.scrollTo(0, 0);}height = 10;if (timer != null) {timer.cancel();timer = null;}if (timerTask != null) {timerTask.cancel();timerTask = null;}}}

activity_main 的 xml 文件中的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="350dp"android:layout_height="wrap_content"android:layout_alignParentRight="true"></android.support.v7.widget.RecyclerView>
</RelativeLayout>

MyAdapter 中的代码:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {private ArrayList<String> mData;public MyAdapter(ArrayList<String> data) {this.mData = data;}public interface OnItemClickListener {void onItemClick(String type, int position, TextView textView);}public MyAdapter.OnItemClickListener mOnItemClickListerer;public void setmOnItemClickListerer(MyAdapter.OnItemClickListener listerer) {this.mOnItemClickListerer = listerer;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_view, parent, false);ViewHolder viewHolder = new ViewHolder(v);return viewHolder;}@Overridepublic void onBindViewHolder(final ViewHolder holder, final int position) {holder.mTv.setText(mData.get(position));//开始holder.tv_start.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mOnItemClickListerer.onItemClick("start", position, holder.mTv);}});//结束holder.tv_stop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mOnItemClickListerer.onItemClick("stop", position, holder.mTv);}});}@Overridepublic int getItemCount() {return mData == null ? 0 : mData.size();}public static class ViewHolder extends RecyclerView.ViewHolder {TextView tv_start,tv_stop;TextView mTv;public ViewHolder(View itemView) {super(itemView);mTv = (TextView) itemView.findViewById(R.id.tv_view);tv_start = (TextView) itemView.findViewById(R.id.tv_start);tv_stop = (TextView) itemView.findViewById(R.id.tv_stop);}}}

adapter_view 中的代码:

<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="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开始"android:textColor="@color/colorAccent"android:textSize="30dp" /><TextViewandroid:id="@+id/tv_stop"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="结束"android:layout_marginLeft="20dp"android:textColor="@color/colorAccent"android:textSize="30dp" /></LinearLayout><TextViewandroid:id="@+id/tv_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="26dp" /></LinearLayout>

这样就完成了上面的效果。

TextView自动垂直滚动相关推荐

  1. TextSwitcher实现文本自动垂直滚动

    本文转载自[http://blog.csdn.net/u014369799/article/details/50337229] 实现功能:用TextSwitcher实现文本自动垂直滚动,类似淘宝首页广 ...

  2. android TextView 的垂直滚动

    最近突然对原来做的一个项目有想法,当时是一个显示文本的界面会循环滚动,因为时间比较仓促,就以实现需求为目的写了一个滚动的TextView,结果还是效果挺好的.现在想把它分享给大家,这次写demo是从零 ...

  3. android 自定义textview 垂直滚动,Android中TextView如何实现水平和垂直滚动

    一.只想让TextView显示一行,但是文字超过TextView的长度怎么办? 在开头显示省略号 android:singleLine="true" android:ellipsi ...

  4. android上垂直跑马灯,android textview 垂直滚动and水平跑马灯

    垂直滚动的话就挺简单的.当然了不是自动的垂直滚动.如果是自动的垂直滚动的话还需要自定义.所以如果有需求需要textview 可以垂直滚动的话,那你来这里就对了. 直接贴 代码.就是这么任性. andr ...

  5. android 图片垂直滚动字幕,Android 天气预报图文字幕垂直滚动效果

    在很多天气或者新闻的应用中,我们都能看到一些字幕滚动的效果,最简单的实现为跑马灯效果,用系统提供的属性即可实现. 复杂一些的就需要自己去用自定义控件实现. 比如 让TextView 实现垂直滚动. 这 ...

  6. Android:TextView 自动滚动(跑马灯) (转)

    Android:TextView 自动滚动(跑马灯) TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true" ...

  7. Android TextView垂直滚动,并精准定位到最后一行

    文章目录 1. 问题提出 2.无法精准定位的产生原因 3. 解决方案 1. 问题提出 在使用TextView垂直滚动添加内容,并自动定位到最后一行时,往往会出现TextView没有办法精准定位的情况, ...

  8. android 自动上下翻滚,如何让Android TextView自动向下滚动到最后?

    我有一个TextView,其内容从文本文件中复制.现在每次将文本文件的内容加载到TextView中时,我都希望它自动向下滚动到最后. 这是我的布局XML文件的部分内容: android:id=&quo ...

  9. Android——仿淘宝头条垂直滚动广告

    淘宝App大家用的都比较多了哈,最近看淘宝头条比较多,就来写个小例子吧. 垂直滚动广告的实现原理其实比较简单,就是定时更新列表内容嘛,然后列表切换的时候再加点炫酷的动画就OK了.如果对Android控 ...

最新文章

  1. Python中的小细节
  2. C++11学习之share_ptr和weak_ptr
  3. Spring Security使用
  4. apache网络服务的搭建和配置
  5. dsp 链接命令文件的写法
  6. Spring的9种设计模式(三)总结
  7. 设置共享打印机连接提示0x000000bcb错误问题的修复办法
  8. spring aop 切面执行顺序和常见问题
  9. Gif动态图片怎么做?如何快速生成gif动图?
  10. 西安交通大学大学计算机考试题,西安交通大学17年3月课程考试《计算机应用基础》作业考核试题...
  11. 洛谷:P1042 [NOIP2003 普及组] 乒乓球 C++详解
  12. Android自定义网络状态请求页面
  13. Android 多通道录音笔记
  14. vue----前端精选50道面试题---一个小白的孤芳自赏
  15. Cassandra_教程二_利用 CQL 操作 Cassandra
  16. choose ,when ,otherwise
  17. 将复制文件ExtremeCopy整合到TC(Total commander)中
  18. 读《小米网抢购系统开发实践》有感
  19. uniapp 调用手机相机拍照实现图片上传
  20. QCC---配置文件中标签(tag)参考说明

热门文章

  1. 【通信原理】第二章 -- 确知信号
  2. [XSIM 43-3225]Cannot find tb design unit work. in library work located at xsim.dir /work解决
  3. 零基础驯养一头程序猿:从入门到结婚(上)
  4. ARP欺骗攻击(流量图片)——dsniff与driftnet使用
  5. Android点击Button按钮切换按钮文字显示
  6. html css简单的文章展示
  7. rust代练吧_前端程序员,通过小练习学习 Rust (一)
  8. eclipse 2022:安装中文语言包(babel language packs)塈切换语言的方法
  9. 纯汇编实现打飞机小游戏
  10. windows 如何重启php,Windows下配置Nginx+PHP基本操作(启动、重启和退出)