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的缓存与重用详解