使用ViewFLow制作循环滑动广告牌

来源:互联网 发布:aide c语言插件 编辑:程序博客网 时间:2024/04/27 13:28

           广告牌是android客户端中常见得一种效果,那么我们今天就用viewflow这个开源控件来制作一个可以循环滑动的广告牌。、

      首先可以从git上下载插件,然后集成到我们的项目中。地址:https://github.com/pakerfeldt/android-viewflow

      然后我们先看一下效果图

     

    额....效果还可以吧。下面是布局和主要代码


   

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"   >       <RelativeLayout            android:id="@+id/framelayout"            android:layout_width="fill_parent"            android:layout_height="0dp"            android:layout_weight="1"            >           <!-- 广告牌 -->           <com.example.bascialframeworlk.android.view.viewflow.ViewFlow                android:id="@+id/ViewFlow"                android:layout_width="fill_parent"                android:layout_height="fill_parent" >            </com.example.bascialframeworlk.android.view.viewflow.ViewFlow>                        <!-- 外层现行布局作为背景浮层,做出半透明效果 -->            <LinearLayout                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_alignParentBottom="true"                android:gravity="center_horizontal"                android:padding="5dp"                 android:background="#40000000">                <!-- 用于放置添加的小球 -->                <LinearLayout                    android:id="@+id/redLayout"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:orientation="horizontal"                    android:padding="1dip" >                </LinearLayout>            </LinearLayout>         </RelativeLayout>                                  <LinearLayout               android:layout_width="match_parent"              android:layout_height="0dp"              android:layout_weight="1.8">           </LinearLayout> <span style="font-family: Arial, Helvetica, sans-serif;"></LinearLayout></span>

     在使用ViewFlow之前,我们要为他设置一个Adapter.最简单的方式直继承BaseAdapter。代码如下

    

package com.example.viewflowdemo;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;public class ImageAdapter extends BaseAdapter{private Context mContext;private LayoutInflater mInflater;private final int[] ids = {R.drawable.i1,R.drawable.i2,R.drawable.i3,R.drawable.i4,R.drawable.i5};//存放图片资源的数组,这里的数据都是静态的.public ImageAdapter(Context context) {this.mContext = context;mInflater = LayoutInflater.from(mContext);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn Integer.MAX_VALUE; // 返回很大的值使得getView中的position不断增大来实现循环}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn ids[position%5];}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//渲染布局得到每个item,这里就不写view复用了,人懒.....// TODO Auto-generated method stubif(convertView==null){convertView=mInflater.inflate(R.layout.image_item,null);}ImageView img=(ImageView)convertView.findViewById(R.id.img_td);img.setBackgroundResource(ids[position%5]);return convertView;}}

  item的布局,很简单不做介绍.

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ImageView         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:scaleType="fitXY"        android:id="@+id/img_td"     /></LinearLayout>

    最后主界面代码:

    

package com.example.viewflowdemo;import java.util.ArrayList;import java.util.List;import com.example.bascialframeworlk.android.view.viewflow.ViewFlow;import com.example.bascialframeworlk.android.view.viewflow.ViewFlow.ViewSwitchListener;import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;public class MainActivity extends Activity {    ViewFlow viewFlow;    LinearLayout redLayout;//放置小球的布局.   List<TextView> points = null;//用于存放5个小球,以便于在滑动时候改变他们的背景色   LinearLayout.LayoutParams params;//用于设置5个小球的位置大小参数.@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewFlow = (ViewFlow)findViewById(R.id.ViewFlow);redLayout = (LinearLayout)findViewById(R.id.redLayout);initData();initAction();}   private void initData(){    viewFlow.setAdapter(new ImageAdapter(this));viewFlow.setmSideBuffer(5); //实际图片张数viewFlow.setTimeSpan(4000);//设置轮播时间间隔viewFlow.setSelection(5 * 1000); // 设置初始位置,这里让viewflow的item位置放到5000,可以循环滑动.有更好的方法可以留言,欢迎指教.viewFlow.startAutoFlowTimer(); // 启动自动播放 points = new ArrayList<TextView>();//初始化小球的大小位置params = new LinearLayout.LayoutParams(16, 16);params.leftMargin = 8;params.rightMargin =8;        for (int i = 0; i < 5; i++) {TextView tv = new TextView(this);// 初始化TextView,即每个小球的位置参数背景tv.setLayoutParams(params);if (i==0) {tv.setBackgroundResource(R.drawable.circle_red);} else {tv.setBackgroundResource(R.drawable.circle_white);} tv.setGravity(Gravity.CENTER);//设置居中points.add(tv);//添加到小球的数组中redLayout.addView(tv);//添加进浮层中.}   }       private void initAction(){   viewFlow.setOnViewSwitchListener(new ViewSwitchListener(){//设置监听器,广告牌滑动的时候改变小球背景色.   public void onSwitched(View view, int position) { for(int i=0;i<5;i++){ if(position%5==i){ points.get(i).setBackgroundResource(R.drawable.circle_red); } else{ points.get(i).setBackgroundResource(R.drawable.circle_white); } }  } });   }}


  补充: 需要补充一点的是,下面的小球作为指示器,在广告牌滑动的过程中是不会出现的。也就是说小球不会在间隙之前出现。如果想要在滑动的过程中,做到小球一直出现滑动的效果可以使用ViewFlow自带的CircleFlowIndicator,这里就不作介绍了。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 创维电视都是VIP怎么办 挂电视距离太远怎么办 电视离沙发太近怎么办 苹果6更新11.1卡怎么办 苹果升级变卡了怎么办 迅雷被资源举报无法加速怎么办 迅雷的敏感资源无法加速怎么办 迅雷下载敏感资源无法加速怎么办 换手机微信账户怎么办 拉链拉不合没有蜡怎么办 长杆烟斗头松动怎么办? 大王卡没流量了怎么办 晚上电视想看野外生存怎么办 假离婚后真离婚怎么办 苹果手机在车上不能充电怎么办 遥控钥匙打不开车门怎么办 苹果访问限制密码忘记了怎么办 苹果手机忘记访问限制密码怎么办 苹果忘记访问限制密码怎么办 苹果限制访问密码忘了怎么办 东奥会计书盗版怎么办 合同封印少盖一页怎么办 玩单机游戏屏幕输入不支持怎么办 汽车不小心陷进泥潭怎么办 招商银行信用卡激活电话换了怎么办 冲鼻子是耳朵进水了怎么办 不小心点了赞怎么办 小车间太热了怎么办 在车间上班好热怎么办 英雄杀四星李逵不拉仇恨怎么办 手表玻璃里面有雾水怎么办 dw手表玻璃碎了怎么办 手表玻璃面花了怎么办 有个窝囊的父母怎么办 苹果7p玩游戏卡怎么办 三星玩游戏很卡怎么办 三星打游戏很卡怎么办 香水喷到眼睛里怎么办 萍果平板锁机怎么办? 苹果6开机卡死怎么办 辐射4发夹用完了怎么办