Andriod UI中viewFlow实现仿淘宝的自动播放功能
android-viewflow 是 Android 平台上一个视图切换的效果库。ViewFlow 相当于 Android UI 部件提供水平滚动的 ViewGroup,使用 Adapter 进行条目绑定。文档上说,当你需要在一系列不确定数目的view中滑动时,可以考虑使用ViewFlow。如果你的view数目确定,你应该使用Fragments 或兼容库里的ViewPager 。
怎么使用使用ViewFlow?首先在你的layout文件中加入:
<org.taptwo.android.widget.viewflow
android:id="@+id/viewflow"
app:sidebuffer="5"
/>
其中app:sidebuffer属性是ViewFlow组件自定义的,使用这些属性时,需要增加如下的xml的命名空间:
xmlns:app="http://schemas.android.com/apk/res/your.application.package.here"
然后在你的Activity里面添加如下代码用于使用ViewFlow:
ViewFlow viewFlow = (ViewFlow) findViewById(R.id.viewflow); viewFlow.setAdapter(myAdapter); //设置初始view的位置 //viewFlow.setAdapter(myAdapter, 8); //监听view切换事件,简单的需求可不监听 viewFlow.setOnViewSwitchListener(new ViewSwitchListener() { public void onSwitched(View v, int position) { / / Your code here } });
当然,你也可以使用该库中的FlowIndicator为你在多个view中切换时提供一个指示器,目前该库已经实现了两种指示器:一种是圆点指示器FlowIndicator;另一种是标题指示器TitleFlowIndicator。
圆点指示器使用,先在layout中这样定义:
<org.taptwo.android.widget.CircleFlowIndicator
android:padding="10dip" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/viewflowindic"
android:background="#00000000"
/>
然后在activity中调用它
CircleFlowIndicator indic = (CircleFlowIndicator)
findviewbyid(r.id.viewflowindic);
viewFlow.setFlowIndicator(indic);
圆点指示器还支持activeColor、inactiveColor、activeType(填充或描边)、inactiveType(填充或描边)、fadeOut(设置圆点自动隐藏的秒数,若为0则不会自动隐藏)、radius(圆点的半径)等。
、使用标题指示器
标题指示器也是先layout里定义:
<org.taptwo.android.widget.TitleFlowIndicator
android:id="@+id/viewflowindic"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
app:footerLineHeight="2dp"
app:footerTriangleHeight="10dp"
app:textColor="#FFFFFFFF" app:selectedColor="#FFFFC445"
app:footerColor="#FFFFC445" app:titlePadding="10dp"
app:textSize="11dp" app:selectedSize="12dp"
android:layout_marginTop="10dip"
app:clipPadding="5dp" />
然后在activity中调用它:
TitleFlowIndicator indicator = (TitleFlowIndicator)
findViewById(R.id.viewflowindic);
indicator.setTitleProvider(myTitleProvider);
viewFlow.setFlowIndicator(indicator);
以上就是ViewFlow库提供三大组件及其用法(来自其文档),使用时需要下载到其代码并放在你的项目中的某个包内,当然你也可以把该组件库打包成jar调用。
Andriod UI中viewFlow实现仿淘宝的自动播放功能代码示例:
ImageAdapter.java package com.viewflowtest.cjy; import java.util.List; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.Toast; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import com.yooeee.ziyoutong.R; public class ImageAdapter extends BaseAdapter { // private DisplayImageOptions options; protected ImageLoader imageLoader; private Context mContext; private List list;private LayoutInflater mInflater; public ImageAdapter(Context context,List list) {mContext = context;this.list = list; imageLoader = imageLoader.getInstance() mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() {return Integer.MAX_VALUE; //返回很大的值使得getView中的position不断增大来实现循环 } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) {if (convertView == null) { convertView = mInflater.inflate(R.layout.image_item, null); }ImageView imageView = ((ImageView) convertView.findViewById(R.id.imgView)); imageLoader.displayImage(list.get(position%list.size()), imageView); convertView.setOnClickListener(new OnClickListener() {@Override public void onClick(View v) {Toast.makeText(mContext, "" + position, Toast.LENGTH_SHORT).show();//Intent intent = new Intent(mContext,ABSclass.class); Bundle bundle = new Bundle(); bundle.putString("image_id", list.get(position%list.size()));//intent.putExtras(bundle);//mContext.startActivity(intent); } } ); return convertView; } }
application中
@Override public void onCreate() { // 初始化下载图片jar包 initImageLoader(getApplicationContext()); } public static void initImageLoader(Context context) { ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory().discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging().build(); ImageLoader.getInstance().init(config); }
在你用的activity中加入
viewFlow = (ViewFlow)findViewById(R.id.viewflow); viewFlow.setAdapter(new ImageAdapter(this)); viewFlow.setmSideBuffer(3); // 实际图片张数, 我的ImageAdapter实际图片张数为3 CircleFlowIndicator indic = (CircleFlowIndicator) findViewById(R.id.viewflowindic); viewFlow.setFlowIndicator(indic); viewFlow.setTimeSpan(4500); viewFlow.setSelection(3*1000); //设置初始位置 viewFlow.startAutoFlowTimer(); //启动自动播放
andriod中UIScrollView无法正常滚动的解决方法 Andriod Git 服务器 Gidder 隐藏andriod 应用app启动图标的几种方法 开源的PC、Andriod文本朗读软件 AISEntry Andriod上ANR介绍及ANR问题解决方法 有没有在 Ubuntu 系统下用过 ADB (Andriod Debug Bridge)的 andriod下java socket网络编程:java socket客户端服务端代码示例 linux/andriod下有可以测试内存读写是否出错的工具吗 Android及andriod无线网络Wifi开发的几点注意事项 Andriod开发中引入jar包的正确方式介绍 andriod中ListView, listItem布局和convertView的缓存与重用详解