溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android自定義TextBanner實(shí)現(xiàn)自動(dòng)滾動(dòng)的方法

發(fā)布時(shí)間:2020-07-27 09:35:48 來源:億速云 閱讀:246 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要講解了Android自定義TextBanner實(shí)現(xiàn)自動(dòng)滾動(dòng)的方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

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、設(shè)置幻燈片的形式滾動(dòng)
    // viewFlipper.startFlipping();
 
    // 2、設(shè)置自動(dòng)翻頁滾動(dòng)
    viewFlipper.setAutoStart(true);
    viewFlipper.isAutoStart();
  }
}

用到的資源 

1、動(dòng)畫資源

(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

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<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

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<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實(shí)現(xiàn)自動(dòng)滾動(dòng)的方法

沒有自測(cè)哦  有bug自己解決

看完上述內(nèi)容,是不是對(duì)Android自定義TextBanner實(shí)現(xiàn)自動(dòng)滾動(dòng)的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI