Android自定义TextBanner实现自动滚动

编辑: admin 分类: 安卓教程 发布时间: 2022-03-14 来源:互联网

本文实例为大家分享了Android自定义TextBanner实现自动滚动的具体代码,供大家参考,具体内容如下

1、TextBanner

package com.example.myapplication.customview;
 
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.ViewFlipper;
 
import com.example.myapplication.R;
 
import java.util.ArrayList;
import java.util.List;
 
public class TextBanner extends ViewGroup {
 private List<String> mData = new ArrayList<>();
 private ViewFlipper viewFlipper;
 private int parentWidthSpec;
 
 public TextBanner(Context context) {
 super(context);
 }
 
 public TextBanner(Context context, AttributeSet attrs) {
 super(context, attrs);
 }
 
 public TextBanner(Context context, AttributeSet attrs, int defStyleAttr) {
 super(context, attrs, defStyleAttr);
 }
 
 @Override
 protected void onLayout(boolean changed, int l, int t, int r, int b) {
 
 
 int top = 0;
 int bottom = getChildAt(0).getMeasuredHeight();
 
 
 int left = 0;
 for (int i = 0; i < getChildCount(); i++) {
  View view = getChildAt(i);
  left = (parentWidthSpec - view.getMeasuredWidth()) / 2;
  view.layout(left, top, left + view.getMeasuredWidth(), bottom);
  top += view.getMeasuredHeight();
  bottom = top + view.getMeasuredHeight();
 
 }
 Log.d("tzg", "bottom: " + bottom);
 Log.d("tzg", "top: " + top);
 
 
 }
 
 
 public void setData(List<String> data) {
 mData.clear();
 if (data.isEmpty()) {
  return;
 }
 this.mData = data;
 
 setTextList();
 }
 
 private void setTextList() {
 viewFlipper = (ViewFlipper) LayoutInflater.from(getContext()).inflate(R.layout.flow_layout_viewflip, this, false);
 for (String mDatum : mData) {
 
  TextView view = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.flow_layout_textview, this, false);
  view.setText(mDatum);
  viewFlipper.addView(view);
 
 }
 viewFlipper.setInAnimation(getContext(), R.anim.come_in);
 viewFlipper.setOutAnimation(getContext(), R.anim.come_out);
 viewFlipper.setFlipInterval(2000);
 addView(viewFlipper);
 }
 
 
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 
 parentWidthSpec = MeasureSpec.getSize(widthMeasureSpec);
 int parentHeightSpec = MeasureSpec.getSize(heightMeasureSpec);
 
 
 int childWidth = MeasureSpec.makeMeasureSpec(parentWidthSpec, MeasureSpec.AT_MOST);
 int childHeight = MeasureSpec.makeMeasureSpec(parentHeightSpec, MeasureSpec.AT_MOST);
 
 int totalHeight = getChildAt(0).getMeasuredHeight();
 
 for (int i = 0; i < getChildCount(); i++) {
  View view = getChildAt(i);
  measureChild(view, childWidth, childHeight);
 }
 Log.d("tzg", "totalCount: " + totalHeight);
 setMeasuredDimension(parentWidthSpec, totalHeight);
 
 }
 
 
 public void startAnimation() {
 // 1、设置幻灯片的形式滚动
 // viewFlipper.startFlipping();
 
 // 2、设置自动翻页滚动
 viewFlipper.setAutoStart(true);
 viewFlipper.isAutoStart();
 }
}

用到的资源 

1、动画资源

(1)、come_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
 
 <translate
 android:duration="1000"
 android:fromYDelta="100%p"
 android:toYDelta="0"/>
 
</set>

(2)、come_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
 
 <translate
 android:duration="1000"
 android:fromYDelta="0"
 android:toYDelta="-100%p"/>
 
</set>

2、布局资源

(1)、flow_layout_viewflip.xml

<?xml version="1.0" encoding="utf-8"?>
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center">
</ViewFlipper>

(2)、flow_layout_textview.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:gravity="center"
 android:padding="5dp"
 android:text="demo"
 android:textColor="#FF00FF" />

3、在mainActivity中的使用

package com.example.myapplication;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;
 
import com.example.myapplication.customview.FlowLayout;
import com.example.myapplication.customview.TextBanner;
 
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 ArrayList<String> arrayList = new ArrayList<>();
 arrayList.add("111111111");
 arrayList.add("222222222222444444444444");
 arrayList.add("你好5");
 arrayList.add("你好633");
 arrayList.add("你好a7好a7");
 arrayList.add("你好7889");
 arrayList.add("你好2323423423 ");
 arrayList.add("你好sdfsfada你好sdfsfada ");
 arrayList.add("你好34345");
 arrayList.add("pppppppp");
 arrayList.add("你好");
 arrayList.add("你好你好");
 arrayList.add("电视");
 arrayList.add("冰箱冰箱冰箱冰箱冰箱冰箱冰箱冰箱冰箱冰箱");
 arrayList.add("woaoni");
 arrayList.add("你好");
 arrayList.add("你好");
 TextBanner viewById = this.findViewById(R.id.text_banner);
 viewById.setData(arrayList);
 viewById.startAnimation();
 }
}

具体效果

没有自测哦  有bug自己解决

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持海外IDC网。

【文章转自日本多IP站群服务器 http://www.558idc.com/japzq.html提供,感恩】