Android AdapterViewFlipper
在本教程中,我们将在Android应用程序中讨论和实现AdapterViewFlipper类。
Android AdapterViewFlipper
AdapterViewFlipper类是ViewAnimator类的子类,用于在2个或者更多视图之间切换,从而一次仅显示一个视图。
这通常在幻灯片中使用。
ViewFlipper和AdapterViewFlipper之间的区别
- ViewFlipper用于最初显示所有幻灯片视图。
- 静态地。
- 这意味着视图将不会被回收。
AdapterViewFlipper用于使用适配器显示所有子视图。
类似于ListView/Spinner/RecyclerView。
因此,有空间回收视图并动态加载视图。
通过以下方式在XML布局中定义AdapterViewFlipper:
<AdapterViewFlipper android:layout_width="match_parent" android:layout_height="match_parent"> </AdapterViewFlipper>
以下是使用的重要XML属性:
android:autoStart-加载适配器后开始翻转视图。
android:flipInterval-用于设置显示下一个子视图的时间间隔。
设置以毫秒为单位。
每个方法也都有其Java对应方法。
以下是AdapterViewFlipper类上使用的其他一些Java方法:
isFlipping()–返回一个布尔值,指示AdapterViewFlipper翻转是否正在进行。
showNext()–手动进入下一个视图。
showPrevious()–转到上一个视图。
startFlipping()
–开始翻转。
如果autostart为true,则将自动调用此方法。stopFlipping()
–停止翻转。isAutoStart()–如果在子级查看附加到适配器的位置时自动调用了" startFlipping",则返回true。
在以下部分中,我们将使用上面讨论的AdapterViewFlipper概念创建一个android应用程序。
代码
下面给出了" activity_main.xml"布局的代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <AdapterViewFlipper android:id="@+id/adapterViewFlipper" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:autoStart="true" <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/adapterViewFlipper" android:layout_centerHorizontal="true" android:text="STOP/START" </RelativeLayout>
下面给出了" row_view_item.xml"的代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="150dp" android:layout_gravity="center" <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="2dp" android:textColor="#000" </LinearLayout>
MainActivity.java类的代码如下:
package com.theitroad.androidadapterviewflipper; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterViewFlipper; import android.widget.Button; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { AdapterViewFlipper adapterViewFlipper; ArrayList<AndroidVersion> androidVersions = new ArrayList<>(); Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); populateData(); adapterViewFlipper = findViewById(R.id.adapterViewFlipper); button = findViewById(R.id.button); adapterViewFlipper.setAdapter(new AdapterViewFlipperAdapter(this, androidVersions)); adapterViewFlipper.setFlipInterval(500); adapterViewFlipper.startFlipping(); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (adapterViewFlipper.isFlipping()) adapterViewFlipper.stopFlipping(); else adapterViewFlipper.startFlipping(); } }); } @Override protected void onResume() { super.onResume(); if (adapterViewFlipper != null && !adapterViewFlipper.isFlipping()) adapterViewFlipper.startFlipping(); } @Override protected void onPause() { super.onPause(); if (adapterViewFlipper != null && adapterViewFlipper.isFlipping()) adapterViewFlipper.stopFlipping(); } private void populateData() { androidVersions.add(new AndroidVersion(R.drawable.android_e, "Android Eclair")); androidVersions.add(new AndroidVersion(R.drawable.android_g, "Android Gingerbread")); androidVersions.add(new AndroidVersion(R.drawable.android_j, "Android Jellybean")); androidVersions.add(new AndroidVersion(R.drawable.android_k, "Android Kitkat")); androidVersions.add(new AndroidVersion(R.drawable.android_l, "Android Lollipop")); androidVersions.add(new AndroidVersion(R.drawable.android_m, "Android Marshmallow")); androidVersions.add(new AndroidVersion(R.drawable.android_n, "Android Nougat")); androidVersions.add(new AndroidVersion(R.drawable.android_o, "Android Oreo")); } } class AndroidVersion { int drawableInt; String versionName; AndroidVersion(int d, String v) { drawableInt = d; versionName = v; } }
我们定义了一个Model类AndroidVersion。
数据从AndroidVersion的ArrayList填充到Adapter类中。
为了节省内存,我们将在活动处于后台时停止翻转。
当视图进入和退出AdapterViewFlipper时,我们可以通过以下方式添加动画:
" adapterViewFlipper.setInAnimation()"和" adapterViewFlipper.setInAnimation()"
AdapterViewFlipperAdapter.java类的代码如下:
package com.theitroad.androidadapterviewflipper; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; public class AdapterViewFlipperAdapter extends BaseAdapter { private ArrayList<AndroidVersion> androidVersions; private Context mContext; public AdapterViewFlipperAdapter(Context context, ArrayList<AndroidVersion> androidVersions) { this.mContext = context; this.androidVersions = androidVersions; } @Override public int getCount() { return androidVersions.size(); } @Override public Object getItem(int position) { return androidVersions.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(mContext). inflate(R.layout.row_view_item, parent, false); } AndroidVersion version = androidVersions.get(position); TextView textView = convertView.findViewById(R.id.textView); ImageView imageView = convertView.findViewById(R.id.imageView); textView.setText(version.versionName); imageView.setImageResource(version.drawableInt); return convertView; } }