android 自定义banner样式_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 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 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

android:duration="1000"

android:fromYDelta="100%p"

android:toYDelta="0"/>

(2)、come_out.xml

android:duration="1000"

android:fromYDelta="0"

android:toYDelta="-100%p"/>

2、布局资源

(1)、flow_layout_viewflip.xml

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center">

(2)、flow_layout_textview.xml

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 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();

}

}

具体效果

没有自测哦  有bug自己解决

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值