Android AdapterViewFlipper

时间:2020-02-23 14:28:44  来源:igfitidea点击:

在本教程中,我们将在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;
  }
}