Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > Android图片浏览

Android实现图片浏览功能的示例详解(附带源码)

作者:Katie。

在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一下

一、项目背景详细介绍

在许多应用中,都需要展示图片并支持用户进行浏览:

如果仅仅是显示一张图片,用 ImageView 即可;但 浏览功能 还需要支持 左右滑动切换、缩放、拖动 等操作。

二、项目需求详细介绍

支持展示多张图片;

用户可左右滑动切换图片;

支持双击放大、手势缩放;

支持拖动查看放大的图片;

可从网络/本地加载图片。

三、相关技术详细介绍

ViewPager2 / RecyclerView

横向翻页切换图片。

PhotoView(开源库)

Glide / Picasso

高效加载本地和网络图片,支持缓存。

四、实现思路详细介绍

使用 ViewPager2 承载图片列表,实现左右滑动切换;

每个页面放一个 PhotoView,支持缩放和拖动;

使用 Glide 加载图片(支持网络/本地资源);

可在底部添加指示器(点点或文字)显示当前位置。

五、完整实现代码

// ========================== MainActivity.java ==========================
package com.example.imagebrowser;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;

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

/**
 * 主界面,展示图片浏览
 */
public class MainActivity extends AppCompatActivity {

    private ViewPager2 viewPager;
    private ImagePagerAdapter adapter;
    private List<String> imageList;

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

        viewPager = findViewById(R.id.viewPager);

        // 模拟数据,可以是本地或网络图片地址
        imageList = new ArrayList<>();
        imageList.add("https://picsum.photos/600/800?random=1");
        imageList.add("https://picsum.photos/600/800?random=2");
        imageList.add("https://picsum.photos/600/800?random=3");
        imageList.add("https://picsum.photos/600/800?random=4");

        adapter = new ImagePagerAdapter(this, imageList);
        viewPager.setAdapter(adapter);
    }
}


// ========================== ImagePagerAdapter.java ==========================
package com.example.imagebrowser;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;

import java.util.List;

import uk.co.senab.photoview.PhotoView;

/**
 * ViewPager2 的适配器
 */
public class ImagePagerAdapter extends RecyclerView.Adapter<ImagePagerAdapter.ViewHolder> {

    private Context context;
    private List<String> imageList;

    public ImagePagerAdapter(Context context, List<String> imageList) {
        this.context = context;
        this.imageList = imageList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_image, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        String url = imageList.get(position);
        Glide.with(context)
                .load(url)
                .into(holder.photoView);
    }

    @Override
    public int getItemCount() {
        return imageList.size();
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        PhotoView photoView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            photoView = itemView.findViewById(R.id.photoView);
        }
    }
}


// ========================== res/layout/activity_main.xml ==========================
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>


// ========================== res/layout/item_image.xml ==========================
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <uk.co.senab.photoview.PhotoView
        android:id="@+id/photoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/black"
        android:scaleType="fitCenter" />
</FrameLayout>


// ========================== build.gradle (app) ==========================
dependencies {
    implementation 'androidx.viewpager2:viewpager2:1.0.0'
    implementation 'com.github.chrisbanes:PhotoView:2.3.0'
    implementation 'com.github.bumptech.glide:glide:4.16.0'
}

六、代码详细解读

1.MainActivity

2.ImagePagerAdapter

3.PhotoView

支持缩放、拖动、双击放大等操作。

4.布局文件

七、项目详细总结

本项目实现了一个 完整的图片浏览功能

该功能常用于 相册浏览、商品详情页、图库预览

八、项目常见问题及解答

Q:加载大图会卡顿怎么办?

A:使用 Glide 的缩略图加载 + 占位图,避免白屏。

Q:如何支持本地图片?

A:Glide.with(context).load(new File(path)) 即可。

Q:能否支持无限循环?

A:可以在 Adapter 中对 position 取模,或用第三方 Banner 库。

九、扩展方向与性能优化

添加指示器

在底部显示当前图片位置(1/10)。

支持长按保存

长按图片弹出对话框,保存到相册。

优化加载

使用 Glide 的缓存和缩略图策略。

全屏沉浸式浏览

隐藏状态栏和导航栏,提升沉浸感。

到此这篇关于Android实现图片浏览功能的示例详解(附带源码)的文章就介绍到这了,更多相关Android图片浏览内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文