1. 程式人生 > 程式設計 >Android自定義TextBanner實現自動滾動

Android自定義TextBanner實現自動滾動

本文例項為大家分享了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,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("你好");
    arrayList.add("你好");
    TextBanner viewById = this.findViewById(R.id.text_banner);
    viewById.setData(arrayList);
    viewById.startAnimation();
  }
}

具體效果

Android自定義TextBanner實現自動滾動

沒有自測哦 有bug自己解決

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。