Android学习笔记二十二之ViewFlipper&&AdapterViewFlipper
16lz
2021-01-23
Android学习笔记二十二之ViewFlipper&&AdapterViewFlipper
ViewFilpper和AdapterViewFlipper,是Android自带的一个多页面管理控件。可以把它看做一个容器,它可以放很多个View,每次只向用户展示一个View。与ViewPager不同,它是将View一层一层地摆放,可以使用它来实现图片的轮播。
有这些属性:
android:animateFirstView:设置显示该组件的第一个View时是否使用动画
android:inAnimation:设置组件显示时使用的动画
android:loopViews:设置循环到最后一个组件后是否自动“转头”到第一个组件
android:outAnimation:设置组件隐藏时使用的动画
android:autoStart:设置显示该组件是否是自动播放
android:flipInterval:设置自动播放的时间间隔
下面直接通过实例来体会一些这两个控件:
Activity代码:
package com.example.filpperdemo;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.widget.ViewFlipper;/** * Created by Devin on 2016/7/6. */public class ViewFilpperActivity extends AppCompatActivity {private ViewFlipper vf;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_viewfilpper); vf = (ViewFlipper) findViewById(R.id.vf); vf.startFlipping();}}
布局比较简单,就不贴代码了,这里需说明一下的就是,ViewFilpper可以通过布局文件加载View,也可以通过代码加载View。例子中只通过布局文件加载View,后面会附上例子源码,有兴趣的可以看一下。
AdapterViewFilpper控件:
Activity代码:
package com.example.filpperdemo;
import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterViewFlipper;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ImageView;/** * Created by Devin on 2016/7/6. */public class AdapterViewFilpperActivity extends AppCompatActivity {private AdapterViewFlipper avf;private Button btn_prev;private Button btn_auto;private Button btn_next;private int[] images = {R.drawable.vf_08, R.drawable.vf_09, R.drawable.vf_10, R.drawable.vf_11, R.drawable.vf_12, R.drawable.vf_13, R.drawable.vf_14};@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_adapterviewfilpper); avf = (AdapterViewFlipper) findViewById(R.id.avf); avf.setAdapter(new AVFAdapter()); btn_prev = (Button) findViewById(R.id.btn_prev); btn_prev.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { avf.stopFlipping(); avf.showPrevious(); } }); btn_auto = (Button) findViewById(R.id.btn_auto); btn_auto.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { avf.startFlipping(); } }); btn_next = (Button) findViewById(R.id.btn_next); btn_next.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { avf.stopFlipping(); avf.showNext(); } });}private class AVFAdapter extends BaseAdapter { @Override public int getCount() { return images.length; } @Override public Object getItem(int i) { return i; } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder; if (view == null) { view = LayoutInflater.from(AdapterViewFilpperActivity.this).inflate(R.layout.item_avf, null); viewHolder = new ViewHolder(); viewHolder.imageView = (ImageView) view.findViewById(R.id.iv_avf); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } viewHolder.imageView.setImageResource(images[i]); return view; }}static class ViewHolder { ImageView imageView;}}
布局文件代码:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><AdapterViewFlipper android:id="@+id/avf" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:animateFirstView="true" android:flipInterval="3000" /><Button android:id="@+id/btn_prev" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginBottom="8dp" android:layout_marginLeft="8dp" android:text="前一个" /><Button android:id="@+id/btn_auto" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="8dp" android:text="自动轮播" /><Button android:id="@+id/btn_next" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="8dp" android:layout_marginRight="8dp" android:text="后一个" /></RelativeLayout>
在AdapterViewFilpper中,需要设置适配器,不设置直接用代码加载View的话会出错。
实现的效果图:
使用模拟器,这样会比较耗内存,所以速度有些慢。
猛戳下载源码
附上国内镜像API
更多相关文章
- Android 之布局(一)
- Android开发学习笔记(五)Android五大布局
- 【Android基础入门No.1】Android中的几个布局
- Android >> 26. RecyclerView(二)— 实现横向滚动和瀑布流布局
- android 基本组件
- 一行代码搞定三级缓存
- Android例子源码集成安卓主流优秀第三方组件框架
- Android对用五大布局