android studio如何在fragment中实现图片轮播

我们需要有一个空白的fragment,以及与之对应的layout,还需要一个PagerAdapter的Java类

这里面的example1,2,3,4,5均为示例图片,自己添加即可,放在mipmap文件夹中

这里面的point_normal,point_focus为两个小圆点图片,一个为灰色,一个为鲜艳颜色,也是放在mipmap文件夹中。

这是fragment中的代码:

import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;


public class HomeFragment extends Fragment {
    ViewPager homeVp;
    LinearLayout pointLayout;
    //声明图片数组
    int[]imgIds={R.mipmap.example1,R.mipmap.example2,R.mipmap.example3,R.mipmap.example4,R.mipmap.example5};

    //声明Viewpager的数据源
    List<ImageView> ivList;
    //声明管理指示器小圆点集合
    List<ImageView>pointList;
    //完成定时装置,实现自动滑动的效果
    Handler handler=new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg){
            if (msg.what==1) {
                //获取当前viewpager显示的页面
                int currentItem= homeVp.getCurrentItem();
                //判断是否为最后一张,如果是,回到第一张
                if (currentItem==ivList.size()-1) {
                    homeVp.setCurrentItem(0);
                }else {
                    currentItem++;
                    homeVp.setCurrentItem(currentItem);
                }
                //形成循环
                handler.sendEmptyMessageDelayed(1,2500);
            }
        }
    };
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view= inflater.inflate(R.layout.fragment_home, container, false);
       initView(view);
       initPager();
       setVPListener();
        //延迟五秒钟发送一条消息,通知可以切换viewpager的图片了
        handler.sendEmptyMessageDelayed(1,5000);
        return view;
    }
    /*设置viewPager的监听器函数*/
    private void setVPListener() {
        homeVp.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected(int position) {
                for (int i = 0; i < pointList.size(); i++) {
                    pointList.get(i).setImageResource(R.mipmap.point_normal);
                }
                pointList.get(position).setImageResource(R.mipmap.point_focus);
            }
        });
    }

    /*设置ViewPager显示的页面*/
    private void initPager() {
        ivList=new ArrayList<>();
        pointList=new ArrayList<>();
        for (int i = 0; i < imgIds.length ; i++) {
            ImageView iv = new ImageView(getContext());
            iv.setImageResource(imgIds[i]);
            iv.setScaleType(ImageView.ScaleType.FIT_XY);
            //设置图片view的宽高
            LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            iv.setLayoutParams(lp);
            //将图片view加载到集合当中
            ivList.add(iv);
            //创建图片对应的指示器小圆点
            ImageView piv=new ImageView(getContext());
            piv.setImageResource(R.mipmap.point_normal);
            LinearLayout.LayoutParams plp=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            plp.setMargins(20,0,0,0);
            piv.setLayoutParams(plp);
            //将小圆点加到布局当中
            pointLayout.addView(piv);
            //为了便于操作,将小圆点添加到统一管理的集合中
            pointList.add(piv);
        }
        //默认第一个小圆点是获取焦点的状态
        pointList.get(0).setImageResource(R.mipmap.point_focus);
        HomePagerAdapter HomePagerAdapter = new HomePagerAdapter(getContext(), ivList);
        homeVp.setAdapter(HomePagerAdapter);
    }

    /*初始化控件操作*/
    private void initView(View view) {
        homeVp=view.findViewById(R.id.homefrag_vp);
        pointLayout=view.findViewById(R.id.homefrag_layout);
    }


}

这是与fragment对应的layout中的布局代码:

<?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"
    android:orientation="vertical"
    android:background="@color/bgyellow"
    >
    <androidx.viewpager.widget.ViewPager
        android:layout_width="match_parent"
        android:layout_height="220dp"
        android:id="@+id/homefrag_vp"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:orientation="horizontal"
        android:layout_alignBottom="@+id/homefrag_vp"
        android:layout_marginBottom="10dp"
        android:gravity="center_horizontal"
        android:id="@+id/homefrag_layout"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/homefrag_layout1"
        android:orientation="vertical"
        android:layout_below="@id/homefrag_vp"
        android:layout_marginTop="80dp"/>
</RelativeLayout>
这是HomePagerAdapter中的Java代码:
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;

import java.util.List;

public class HomePagerAdapter extends PagerAdapter {
    Context context;
    List<ImageView> imgList;

    public HomePagerAdapter(Context context, List<ImageView> imgList) {
        this.context = context;
        this.imgList = imgList;
    }

    @Override
    public int getCount() {
        return imgList.size();
    }

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

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView imageView = imgList.get(position);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        ImageView imageView = imgList.get(position);
        container.removeView(imageView);
    }

}

要在 Android Studio 使用 Fragment 实现页面跳转,可以按照以下步骤进行: 1. 在 Android Studio 创建一个新的项目并打开它。 2. 在项目的 `res` 目录下创建一个新的文件夹 `layout`,在其创建两个 XML 布局文件,分别表示两个页面。 3. 在 Java 代码创建两个 Fragment 类,分别对应两个页面,并实现它们的布局和逻辑。 4. 在主 Activity 创建一个布局容器(比如 FrameLayout),用于显示 Fragment。 5. 在主 Activity 实例化两个 Fragment,并通过 FragmentTransaction 将其一个添加到布局容器,另一个则隐藏。 6. 在主 Activity 实现一个切换页面的方法,通过 FragmentTransaction 将当前显示的 Fragment 隐藏,将需要显示的 Fragment 添加到布局容器。 具体实现方式可以参考以下代码: 1. 在 `layout` 目录下创建两个 XML 布局文件: fragment_page1.xml: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is page 1" /> <Button android:id="@+id/btn_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Switch to page 2" /> </LinearLayout> ``` fragment_page2.xml: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is page 2" /> <Button android:id="@+id/btn_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Switch to page 1" /> </LinearLayout> ``` 2. 在 Java 代码创建两个 Fragment 类: Page1Fragment.java: ```java public class Page1Fragment extends Fragment { private Button btnSwitch; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_page1, container, false); btnSwitch = view.findViewById(R.id.btn_switch); btnSwitch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((MainActivity)getActivity()).switchFragment(new Page2Fragment()); } }); return view; } } ``` Page2Fragment.java: ```java public class Page2Fragment extends Fragment { private Button btnSwitch; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_page2, container, false); btnSwitch = view.findViewById(R.id.btn_switch); btnSwitch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((MainActivity)getActivity()).switchFragment(new Page1Fragment()); } }); return view; } } ``` 3. 在主 Activity 创建一个布局容器和两个 Fragment: MainActivity.java: ```java public class MainActivity extends AppCompatActivity { private FrameLayout container; private Page1Fragment page1Fragment; private Page2Fragment page2Fragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); container = findViewById(R.id.container); page1Fragment = new Page1Fragment(); page2Fragment = new Page2Fragment(); getSupportFragmentManager().beginTransaction() .add(R.id.container, page1Fragment) .hide(page2Fragment) .commit(); } public void switchFragment(Fragment fragment) { getSupportFragmentManager().beginTransaction() .hide(page1Fragment) .hide(page2Fragment) .show(fragment) .commit(); } } ``` 4. 运行程序即可看到初始页面为 `Page1Fragment`,点击按钮可以切换到 `Page2Fragment`,再次点击可以切换回 `Page1Fragment`。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值