1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > TextView自动垂直滚动

TextView自动垂直滚动

时间:2023-10-14 03:27:17

相关推荐

TextView自动垂直滚动

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

下面是实现的效果图:

github 下载地址:/wuqingsen/TextViewRollWu

csdn 下载地址:/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="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/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="/apk/res/android"xmlns:tools="/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>

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。