您好,登錄后才能下訂單哦!
這篇文章主要講解了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
<?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(); } }
具體效果
沒有自測(cè)哦 有bug自己解決
看完上述內(nèi)容,是不是對(duì)Android自定義TextBanner實(shí)現(xiàn)自動(dòng)滾動(dòng)的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(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)容。