完成这个例子的步骤:


1.下载ViewFlow的源码,然后将类ViewFlow放在自己的工程的src的某个包下。

2.下载的源码里有2个工程view flow,viewflow-example。将view flow工程里的attr

3.布局文件如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/home_layout"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >


<RelativeLayout

android:id="@+id/home_headerLayout"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="9" >


<Button

android:id="@+id/memo_type_edit_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_centerVertical="true"

android:layout_margin="4dip"

android:background="@drawable/button_bg_select_type"

android:padding="3dip" />


<Button

android:id="@+id/memo_type_btn"

android:layout_width="100dip"

android:layout_height="35dip"

android:layout_centerInParent="true"

android:layout_margin="4dip"

android:background="@drawable/button_bg_down"

android:gravity="center"

android:singleLine="true"

android:text="工作(10)"

android:textColor="@color/white"

android:textSize="18sp"

android:textStyle="bold" />


<Button

android:id="@+id/new_memo_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:layout_margin="4dip"

android:background="@drawable/button_bg_add" />

</RelativeLayout>


<LinearLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1"

android:orientation="vertical" >


<RelativeLayout

android:id="@+id/kitty"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1"

android:orientation="vertical" >


<FrameLayout

xmlns:app="http://schemas.android.com/apk/res/com.bst.memo.activity"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >


<com.lx.viewflow.ViewFlow <!-- 这个类就是拷贝下载的ViewFlow -->

android:id="@+id/home_viewflow"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_marginTop="25dip" />


<com.lx.viewflow.CircleFlowIndicator <!-- 这个类也是下载的工程viewflow中的 -->

android:id="@+id/viewflowindic"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

app:fadeOut="1000"

app:inactiveType="fill"

android:paddingTop="10dip" />

</FrameLayout>


<ImageView

android:id="@+id/setting"

android:layout_width="24dip"

android:layout_height="24dip"

android:layout_alignParentBottom="true"

android:layout_alignParentRight="true"

android:layout_marginBottom="10dip"

android:layout_marginRight="10dip"

android:src="@drawable/i" />

</RelativeLayout>


<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/adlayout"

android:layout_width="wrap_content"

android:layout_height="50dip"

android:layout_gravity="center"

android:background="@drawable/adbg" >

</LinearLayout>

</LinearLayout>


</LinearLayout>


4.ViewFlow写一个适配器:


public class ViewFlowAdapter extends BaseAdapter implements OnItemClickListener {


private LayoutInflater mInflater;

private MemoActivity memoActivity; //Activity


private int selectedPosition = 0;

private List<List<MemoBean>> list =new ArrayList<List<MemoBean>>(); //要显示在ViewFlow中的数据


public GalleryAdapter(MemoActivity activity, List<MemoBean> memoBeanList) {

memoActivity = activity;

mInflater = LayoutInflater.from(activity);

initList(memoBeanList);

}


public void setSelectedPosition(int position) {

this.selectedPosition = position;

}


public void updateData(List<MemoBean> memoBeanList) {

if(list!=null){

list.clear();

}


initList(memoBeanList);

}


@Override

public int getCount() {

return list.size();

}


@Override

public Object getItem(int position) {

return list.get(position);

}


@Override

public long getItemId(int position) {

return position;

}


//初始化ViewFlow的各个页的数据

private void initList(List<MemoBean> memoBeanList){

if(memoBeanList==null){

return;

}

int totalCount = memoBeanList.size();

int pages =0;

if(totalCount%Config.PAGE_SIZE==0){

pages = totalCount/Config.PAGE_SIZE; //Config.PAGE_SIZE控制每页显示多少个

}else{

pages = totalCount/Config.PAGE_SIZE+1;

}

for(int i=1;i<=pages;i++){

list.add(getCurrentPageList(i,memoBeanList));

}

}


//获取当前页的数据

private List<MemoBean> getCurrentPageList(int page,List<MemoBean> memoBeanList) {

List<MemoBean> list = new ArrayList<MemoBean>();

if(memoBeanList!=null && memoBeanList.size()>0){

int totalCount = memoBeanList.size();

int start = 0;

int end = 0;


start = (page - 1) * Config.PAGE_SIZE;


end = start + Config.PAGE_SIZE;

if (end > totalCount) {

end = totalCount;

}

for (int i = start; i < end; i++) {

list.add(memoBeanList.get(i));

}

}


return list;

}


//释放ViewFlow占的资源

public void releaseViewFlow(int currentPosition, ViewFlow viewFlow) {

List<View> views = viewFlow.mLoadedViews;

int size = views.size();

for (int i = 0; i < size; i++) {

if (i != currentPosition){ //我的ViewFlow的每一页对应的布局是一个LinearLayout,LinearLayout里面有个GridView

LinearLayout layout = (LinearLayout) views.get(i);

GridView gridView = (GridView) layout.getChildAt(0);

GridViewAdapter adapter = (GridViewAdapter) gridView.getAdapter();


adapter.clear(); //释放GridView占用的资源

System.gc();

}

}

}


@Override

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

List<MemoBean> memos = list.get(position);

//viewflow_page这个布局对应的就是每页该怎么展示的布局,一个包含GridViewLinearLayout,

convertView = mInflater.inflate(R.layout.viewflow_page, null);

GridView gridView = (GridView) convertView.findViewById(R.id.gridview);

gridView.setOnItemClickListener(this);

GridViewAdapter adapter = (GridViewAdapter) gridView.getAdapter();

if (adapter == null) {

adapter = new GallaryItemAdapter(memoActivity, memos);

gridView.setAdapter(adapter);

} else {

adapter.setMemoList(memos);

adapter.notifyDataSetChanged();

}

}

return convertView;

}


//点击每页里面的GridViewItem的处理

@Override

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {


memoActivity.finish();

Intent intent = new Intent();

intent.setClass(memoActivity, EditActivity.class);

MemoBean memoBean = (MemoBean) ((GridView) parent)

.getItemAtPosition(position);

MemoTypeBean typeBean = new MemoTypeBean(memoActivity);

typeBean = typeBean.getBean(memoBean.getMemoTypeId());

Bundle bundle = new Bundle();

bundle.putSerializable("memo_bean", memoBean);

bundle.putSerializable("type_id", MemoActivity.selectedTypeId);


int start = selectedPosition* Config.PAGE_SIZE+position;

bundle.putInt("current_position", start);

intent.putExtras(bundle);


memoActivity.startActivity(intent);


}


public void clear(){

list.clear();

list=null;

}


}


5.Activity MemoActivity的初始化ViewFlow代码:

mViewFlow = (ViewFlow) findViewById(R.id.home_viewflow);


List<MemoBean> memoList = myMemoBean.getMemoListByType(selectedTypeId);

ViewFlowAdapter adapter = new GalleryAdapter(this, memoList);

mViewFlow.setAdapter(adapter);

if(memoList!=null && memoList.size()>0){

mViewFlow.setSelection(0);

}


6.效果图

Android ViewFlow的一个例子_第1张图片



注意点:

由于在ViewFlow中的onMeasure方法里,有下面这段代码:

if (widthMode != MeasureSpec.EXACTLY && !isInEditMode()) {

throw new IllegalStateException(

"ViewFlow can only be used in EXACTLY mode.");

}


final int heightMode = MeasureSpec.getMode(heightMeasureSpec);

if (heightMode != MeasureSpec.EXACTLY && !isInEditMode()) {

throw new IllegalStateException(

"ViewFlow can only be used in EXACTLY mode.");

}



所以布局时,ViewFlowlayout_width,layout_height是属于确定的模式。按layout_weight来写,或按dip来写死。










更多相关文章

  1. Android Launcher7.0首次数据加载逻辑
  2. android页面布局总结
  3. Android用户界面(三):线性布局…
  4. android 连接数据库
  5. Android 控件在布局中按比例放置
  6. 关于android中线性布局的layout_gravity属性
  7. 【Android开发】布局管理器-帧布局
  8. android maven eclipse里面新建maven工程The desired archetype

随机推荐

  1. Android滑动菜单
  2. Jack 服务编译问题 Android(安卓)7.0
  3. Android的BUG(五)- Android跨进程使用Graph
  4. Android基于Ffmpeg 的软编软解的可视对讲
  5. [Android1.6]横竖屏切换时自动弹出键盘的
  6. 手机改 user模式为debug模式
  7. 使用android真机测试http网络连接异常解
  8. Android常用布局范例
  9. Android(安卓)Zxing集成
  10. Android(安卓)网络请求框架总结(二)