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, 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自己解决

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

时间: 2020-07-23

android scrollview 自动滚动到顶部或者底部的实例

android scrollview 自动滚动到顶部或者底部 摘要: android scrollview 自动滚动到顶部或者底部 android scrollview 自动滚动到顶部或者底部 //设置默认滚动到顶部 scrollView.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub scrollView.fullScroll(ScrollView.FOCUS_UP);

Android 使用ViewPager自动滚动循环轮播效果

对Android 利用ViewPager实现图片可以左右循环滑动效果,感兴趣的朋友可以直接点击查看内容详情. 主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用.顺便解决ViewPager嵌套(ViewPager inside ViewPager)影响触摸滑动及ViewPager滑动速度设置问题. 先给大家展示下效果图,喜欢的朋友可以下载源码: 1.实现 没有通过ScheduledExecutorService或Timer定期执行某个任务实现,而是简单的通过handler发送消息去

android ListView自动滚动方法

复制代码 代码如下: <ListView android:id="listCWJ" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stackFromBottom="true" android:transcriptMode="alwaysScroll" />

Android ListView滚动到底后自动加载数据

熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们 今天就要讲一讲列表组件ListView加载数据的相关内容.通常来说,一个应用在展现大量数据时,不会将全部的可用数据都呈现给用户,因为这不管对于服 务端还是客户端来说都是不小的压力,因此,很多应用都是采用分批次加载的形式来获取用户所需的数据.比如:微博客户端可能会在用户滑动至列表底端时自动加 载下一页数据,也可能在底部放置一个"加载更多"按钮,

Android ViewPager无限循环滑动并可自动滚动完整实例

对于ViewPager 广告页这个功能很多APP都有这个功能在网上也看过一些资料,我就在这把我自己完整的实现方法写出来吧 基础的ViewPager: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="ma

Android编程实现TextView垂直自动滚动功能【附demo源码下载】

本文实例讲述了Android编程实现TextView垂直自动滚动功能.分享给大家供大家参考,具体如下: 在做android 应用的开发的时候,横向滚动或者要做出跑马灯的效果很简单,textview本身的属性就支持,只要设置准确就会滚动,开发起来比较简单,但是textview 不支持垂直滚动,那么垂直滚动就需要自己来实现了,很多网友提供的垂直滚 动方案都是千篇一律,使用ScrollView来进行滚动,但是都不完美,做起来有些别扭.有一位网友给出的歌词的滚动思路明确,能从根本上解决问题,因此我实现的

Android简单实现无限滚动自动滚动的ViewPager

经常我们会在应用中看到一个可以自动滚动,并且无限滚动的一个ViewPager,百度谷歌上面也有很多关于这方面的教程,但是感觉都略显麻烦,而且封装的都不是很彻底.所以试着封装一个比较好用的ViewPager 效果如下: 简单的说一下实现思路,要实现无限滚动的话就要在PagerAdapter上面做一些手脚,在PagerAdapter的getCount的函数的返回值设置成Integer.MXA_VALUE就可以实现向右无限滚动,但是要实现向左无限滚动呢?就是一开始的时候setCurrentItem的时

android 实现ScrollView自动滚动的实例代码

有时候需要动态添加数据,屏幕显示满了,数据需要滚动展示.这里主要弄懂scrollTo(0, off)方法的含义喊用法. 含义不说了,大概意思就这样. 下面来看他的用法: 复制代码 代码如下: private void searchResultShow() { TextView textView = new TextView(AFSearchActivity.this);           textView.setText("Text View ");           Linear

Android使用Recyclerview实现图片水平自动循环滚动效果

简介: 本篇博客主要介绍的是如何使用RecyclerView实现图片水平方向自动循环(跑马灯效果) 效果图:  思路: 1.准备m张图片 1.使用Recyclerview实现,返回无数个(实际Interge.MAXVALUE)item,第n个item显示第n%m张图片 3.使用recyclerview.scrollBy  每个一段时间水平滚动一段距离 4.通过layoutManager.findFirstVisibleItemPosition()获取当前显示的第一个View是第几个item,上面

Android使用自定义属性实现图片自动播放滚动的功能

大家好,记得上次我带着大家一起实现了一个类似与淘宝客户端中带有的图片滚动播放器的效果,但是在做完了之后,发现忘了加入图片自动播放的功能(或许是我有意忘记加的.....),结果图片只能通过手指滑动来播放.于是今天我将再次带领大家,添加上之前遗漏的功能,让我们的图片播放器更加完善. 这次的程序开发将完全基于上一次的代码,如果有朋友还未看过上篇文章,请先阅读Android实现图片滚动和页签控件功能的实现代码. 既然是要加入自动播放的功能,那么就有一个非常重要的问题需要考虑.如果当前已经滚动到了最后一张

JFileChooser实现对选定文件夹内图片自动播放和暂停播放实例代码

本案例通过使用JFileChooser实现对选定文件夹内图片实现自动播放和暂停播放 代码如下,如有不合适的地方 还请指教 package com.xiaoqiang; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swin

图片自动播放器脚本之家修正

图片自动播放器我们修正,可以兼容ff,发现些小问题,希望大家多多讨论,使用方法呢 复制代码 代码如下: ImgName=new ImgArray(3);  ImgName[0]="4.jpg";  ImgName[1]="1.jpg";  ImgName[2]="2.jpg";  ImgName[3]="3.jpg"; 只需修改上面的地方即可,加了图片预载,转载请写明出处,剩下的大家来完善吧 图片自动播放器我们修正 funct

JS特效实现图片自动播放并可控的效果

不多说了,实现方法请看下面代码. 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"/> <title>JS代码实现图片自动播放并可控的效果</title><base target="_blank" /> <link re

Android ViewPager中显示图片与播放视频的填坑记录

ViewPager介绍 ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样. ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包android-support-v4.jar里面. ViewPager: 1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类. 2)ViewPager类需要一个PagerAdapter适配器类给它提供数据. 3)ViewPager经常和Fragment一起使用,并且

Android自定义View 实现闹钟唤起播放闹钟铃声功能

先上图看一下闹钟唤期页面的效果 实现的功能: 1:转动的图片根据天气情况更换 2:转动时间可以设置,转动结束,闹铃声音就结束 3:光圈颜色渐变效果 直接上代码啦: package com.yuekong.sirius.extension.customview; import android.animation.Animator; import android.animation.ValueAnimator; import android.content.Context; import andro

Android使用AsyncTask下载图片并显示进度条功能

在Android中实现异步任务机制有两种方式,Handler和AsyncTask.这篇文章给大家介绍Android使用AsyncTask下载图片并显示进度条功能. AsyncTask下载图片并显示下载进度,异步类AsyncTask配合进度条,简练! public class AsyncTaskActivity2 extends Activity { private Button btnDown;//图片框 private ImageView ivImage;//图片URL private sta

JS实现div内部的文字或图片自动循环滚动代码

复制代码 代码如下: <style type="text/css"> .content{width:500px;height:300px;position:absolute;left:200px;top:100px;border:solid 2px red;padding:10px;overflow:hidden} dl{width:400px;height:30px;border:1px solid black;} </style> <div class

图片自动播放也可通过按钮控制显示

swissarmy.js 复制代码 代码如下: ////NO need to edit ///////////// //more javascript from http://www.smallrain.net function preloadctrl(im){ if (typeof im=='string'){ var imo=new Image(); imo.src=im; } } if(document.images&&typeof preload_ctrl_images!='und

autoPlay 基于jquery的图片自动播放效果

效果图:实现代码: 复制代码 代码如下: <html> <head> <title>Jquery 自动轮播效果</title> <script src="js/jquery-1.6.2.min.js" type="text/javascript"></script> <style> .spanhide{display: none;} #top a:hover{color: red;}