Android AdapterViewFlipper

In this tutorial, we’ll be discussing and implementing the AdapterViewFlipper class in our Android Application.

在本教程中,我们将在Android应用程序中讨论和实现AdapterViewFlipper类。

Android AdapterViewFlipper (Android AdapterViewFlipper)

AdapterViewFlipper class is a subclass of the ViewAnimator class and is used to flip between 2 or more views such that only one view is displayed at a time. This is commonly used in slides.

AdapterViewFlipper类是ViewAnimator类的子类,用于在2个或更多视图之间切换,从而一次仅显示一个视图。 这通常在幻灯片中使用。

Difference between ViewFlipper and AdapterViewFlipper

ViewFlipper和AdapterViewFlipper之间的区别

ViewFlipper is used to display all the slide views initially. Statically. That means the views won’t be recycled.

ViewFlipper用于最初显示所有幻灯片视图。 静态地。 这意味着视图将不会被回收。

AdapterViewFlipper is used to display all the child views using the Adapter. Similar to a ListView/Spinner/RecyclerView. So there is space for recycling the views and also loading views dynamically.

AdapterViewFlipper用于使用适配器显示所有子视图。 类似于ListView / Spinner / RecyclerView。 因此,有空间回收视图并动态加载视图。

An AdapterViewFlipper is defined in the XML layout in the following manner:

通过以下方式在XML布局中定义AdapterViewFlipper:

<AdapterViewFlipper
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
</AdapterViewFlipper>

Following are the important XML attributes used:

以下是使用的重要XML属性:

  • android:autoStart – To start the view flipping once the adapter is loaded.

    android:autoStart –加载适配器后开始翻转视图。
  • android:flipInterval – Used to set the time interval after which the next child view is presented. Set in milliseconds.

    android:flipInterval –用于设置显示下一个子视图的时间间隔。 以毫秒为单位设置。

Each of these has their Java counterpart methods as well.

每个方法也都有其Java对应方法。

Following are some of the other Java methods used on AdapterViewFlipper class:

以下是AdapterViewFlipper类上使用的其他一些Java方法:

  • isFlipping() – Returns a boolean to indicate whether the AdapterViewFlipper flipping is ongoing or not.

    isFlipping() –返回一个布尔值,以指示AdapterViewFlipper翻转是否正在进行。
  • showNext() – To manually go to the next view.

    showNext() –手动转到下一个视图。
  • showPrevious() – Goes to the previous view.

    showPrevious() –转到上一个视图。
  • startFlipping() – To begin flipping. This gets automatically called if autostart is true.

    startFlipping() –开始翻转。 如果autostart为true,则将自动调用此方法。
  • stopFlipping() – To stop flipping.

    stopFlipping() –停止翻转。
  • isAutoStart() – Returns true if startFlipping was automatically called when the child views where attached to the Adapter.

    isAutoStart() –如果在子级查看附加到适配器的位置时自动调用了startFlipping则返回true。

In the following section, we’ll be creating an android application using the above discussed AdapterViewFlipper concepts.

在以下部分中,我们将使用上面讨论的AdapterViewFlipper概念创建一个android应用程序。

项目结构 (Project Structure)

(Code)

The code for the activity_main.xml layout is given below:

下面给出了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>

The code for the row_view_item.xml is given below:

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>

The code for the MainActivity.java class is given below:

MainActivity.java类的代码如下:

package com.journaldev.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;
    }
}

We’ve defined a Model class AndroidVersion.
Data is populated in the Adapter class from an ArrayList of AndroidVersion.
In order to save memory, we’ll stop the flipping when the activity is in the background.

我们定义了一个Model类AndroidVersion。
数据从AndroidVersion的ArrayList填充到Adapter类中。
为了节省内存,当活动处于后台时,我们将停止翻转。

We can add animations when a view enters and exits the AdapterViewFlipper by:

当视图进入和退出AdapterViewFlipper时,我们可以通过以下方式添加动画:

adapterViewFlipper.setInAnimation() and adapterViewFlipper.setInAnimation()

adapterViewFlipper.setInAnimation()adapterViewFlipper.setInAnimation()

The code for the AdapterViewFlipperAdapter.java class is given below:

AdapterViewFlipperAdapter.java类的代码如下:

package com.journaldev.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;
    }
}

The output of the above application in action is given below:

上面应用程序的输出如下:

This brings an end to this tutorial. You can download the project from the link below:

本教程到此结束。 您可以从下面的链接下载项目:

翻译自: https://www.journaldev.com/23318/android-adapterviewflipper

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值