当前位置:  操作系统>andriod

Andriod UI中viewFlow实现仿淘宝的自动播放功能

 
分享到:
    发布时间:2014-2-4  


     android-viewflow 是 Android 平台上一个视图切换的效果库。ViewFlow 相当于 Android UI 部件提供水平滚动的 ViewGroup,使用 Adapter 进行条目绑定。文档上说,当你需要在一系列不确定数目的view中滑动时,可以考虑使用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();  //启动自动播放



本类别最新文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号