Android Studio:如何在多个按钮上使用ViewPagerAdapter加载不同的图像?

时间:2019-02-08 01:01:29

标签: android-studio

我是编码的新手,但是我有些固执。我有一组5个幻灯片,每个幻灯片约30张。我有一个带有5个按钮的活动。我正在使用ViewPagerAdapter从可绘制文件夹中加载幻灯片。使用我在此处发布的代码,所有人都可以使用第一个按钮。该代码将加载所有〜30张图像以进行幻灯片演示。现在,当我尝试为第二个按钮加载可绘制对象中的不同文件创建新的ViewPagerAdapter(无法使用重复的名称,因此将其重命名为ViewPagerAdapterBD。不确定这是否错误)时,代码中的类将灰显说“从未使用过ViewPagerAdapterBD”。我继续加载新图像,但是第二个按钮仍然会从第一个按钮加载文件。我的问题是,如何让我的5个按钮打开可绘制文件夹中的不同图像?要使按钮打开不同的图像,最终使每个按钮显示不同的幻灯片,我需要做什么?还是更好的措词,我想知道如何使用viewpageradapter在不同的活动上使用imageslider?

BurstMode.java

 import android.support.v4.view.ViewPager;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 public class BurstMode extends AppCompatActivity {
 ViewPager viewPager;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_burst_mode);


    getSupportActionBar().setTitle("Burst Mode");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

   viewPager = (ViewPager) findViewById(R.id.viewPager);
 ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this);
 viewPager.setAdapter(viewPagerAdapter);

}
}

activity_burst_mode.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BurstMode">

 <android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content">

 </android.support.v4.view.ViewPager>

 </RelativeLayout>

ViewPagerAdapter.java

 import android.content.Context;
 import android.support.annotation.NonNull;
 import android.support.v4.view.PagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;

 public class ViewPagerAdapter extends PagerAdapter {


private Context context;
private LayoutInflater layoutInflater;
private Integer [] images = {R.drawable.bm1,R.drawable.bm2,R.drawable.bm3,
        R.drawable.bm4,R.drawable.bm5,R.drawable.bm6,R.drawable.bm7,
        R.drawable.bm8,R.drawable.bm8,R.drawable.bm10,R.drawable.bm11,
        R.drawable.bm12,R.drawable.bm13,R.drawable.bm14,R.drawable.bm15,
        R.drawable.bm16,R.drawable.bm17,R.drawable.bm18,R.drawable.bm19,
        R.drawable.bm20,R.drawable.bm21,R.drawable.bm22,R.drawable.bm23,
        R.drawable.bm24,R.drawable.bm26,R.drawable.bm27,R.drawable.bm28,
        R.drawable.bm29,R.drawable.bm30,R.drawable.bm31};


public ViewPagerAdapter(Context context) {
    this.context = context;
}

@Override
public int getCount() {
    return images.length;
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
    return view == o;
}

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    layoutInflater = (LayoutInflater)           
 context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.custom_layout_burst_mode, 
 null);
    ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
    imageView.setImageResource(images[position]);

    ViewPager vp = (ViewPager) container;
    vp.addView(view,0);
    return view;
}

@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull 
 Object object) {

    ViewPager vp = (ViewPager) container;
    View view = (View) object;
    vp.removeView(view);
}


  }

custom_layout_burst_mode.xml

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:id="@+id/imageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal|center_vertical"
    app:srcCompat="@android:drawable/btn_star_big_off"
    tools:layout_editor_absoluteX="164dp"
    tools:layout_editor_absoluteY="65dp" />
 </LinearLayout>

以下是带有按钮的活动图像:Image

我想知道如何使每个按钮打开与其他按钮不同的不同图像集

1 个答案:

答案 0 :(得分:0)

欢迎编程!

继续,然后废弃另一个类ViewPagerAdapterBD。相反,让我们扩展您已经编写的另一个类。

考虑ViewPagerAdapter的构造函数。

public ViewPagerAdapter(Context context) {
    this.context = context;
}

为什么不在此处传递一个参数以使其行为不同?

public ViewPagerAdapter(Context context, SlideShowType type) {
    this.context = context
    this.type = type
}

继续并在Java中查找枚举类型,它将帮助您创建此SlideShowType枚举。完成此操作后,适配器可以在switch语句中检查此配置,并根据传递给构造函数的SlideShowType使用不同的图像数组!

另一个选择是将图像资源数组直接传递到构造函数中。让我知道您是否想跟进更多细节。