Android制作微信添加多个图片放大图片功能

 更新时间:2024年03月19日 09:46:17   作者:小舒卿雨  
这篇文章主要介绍了Android制作微信添加多个图片放大图片功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

1.添加依赖

implementation 'com.github.bumptech.glide:glide:4.12.0' //裁剪图片等等
implementation 'androidx.recyclerview:recyclerview:1.1.0' //recycleview依赖

2.使用recycleview

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

3.编写两个item页面为recycleview的子页面

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/btnAdd"
    android:layout_width="100dp"
    android:layout_height="120dp"
    android:layout_margin="4dp"
    android:layout_weight="1"
    android:text="Add"/>
//点击添加按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="8dp">
    <ImageView
        android:id="@+id/imgView"
        android:layout_width="100dp"
        android:layout_height="100dp"
       />
</LinearLayout>

4.写recycleview的适配器

package com.example.myapplication;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
public class ImageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private final int VIEW_TYPE_IMAGE = 0;
    private final int VIEW_TYPE_ADD_BUTTON = 1;
    private ArrayList<Uri> imageUris;
    private Context context;
    private LayoutInflater inflater;
    private OnAddButtonClickListener addButtonClickListener;
    public interface OnAddButtonClickListener {
        void onAddButtonClick();
    }
    public ImageAdapter(Context context, OnAddButtonClickListener listener) {
        this.context = context;
        this.imageUris = new ArrayList<>();
        this.inflater = LayoutInflater.from(context);
        this.addButtonClickListener = listener;
    }
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == VIEW_TYPE_IMAGE) {
            View itemView = inflater.inflate(R.layout.iteam, parent, false);
            return new ImageViewHolder(itemView);
        } else {
            View itemView = inflater.inflate(R.layout.iteambutton, parent, false);
            Button addButton = itemView.findViewById(R.id.btnAdd);
            addButton.setOnClickListener(v -> addButtonClickListener.onAddButtonClick());
            return new AddButtonViewHolder(itemView);
        }
    }
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        if (getItemViewType(position) == VIEW_TYPE_IMAGE) {
            Uri uri = imageUris.get(position);
            ImageViewHolder imageHolder = (ImageViewHolder) holder;
            Glide.with(context)
                    .load(uri)
                    .centerCrop()
                    .into( imageHolder.imageView);
           //点击图片 放大图片,跳转页面
            imageHolder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent(context,emptyActivity.class);
                    intent.putExtra("url",uri.toString());
                    context.startActivity(intent);
                }
            });
        }
    }
    @Override
    public int getItemCount() {
        // Plus one for the add button
        return imageUris.size() + 1
    }
    @Override
    public int getItemViewType(int position) {
        return position == imageUris.size() ? VIEW_TYPE_ADD_BUTTON : VIEW_TYPE_IMAGE;
    }
    public void addImage(Uri uri) {
        imageUris.add(uri);
        notifyItemInserted(imageUris.size() - 1);
    }
    static class ImageViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        ImageViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imgView);
        }
    }
    static class AddButtonViewHolder extends RecyclerView.ViewHolder {
        AddButtonViewHolder(View itemView) {
            super(itemView);
        }
    }
}
 

5.编写java文件

package com.example.myapplication;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class RecyCleActivity extends AppCompatActivity  implements ImageAdapter.OnAddButtonClickListener{
    private static final int REQUEST_CODE_PICK_IMAGE = 1;
    private ImageAdapter imageAdapter;
    private RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recy_cle);
        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new GridLayoutManager(this,3));
        imageAdapter = new ImageAdapter(this, this);
        recyclerView.setAdapter(imageAdapter);
    }
    @Override
    public void onAddButtonClick() {
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
    }
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_PICK_IMAGE && resultCode == RESULT_OK) {
            if (data != null) {
                Uri selectedImageUri = data.getData();
                if (selectedImageUri != null) {
                    imageAdapter.addImage(selectedImageUri);
                }
            }
        }
    }
}

6.编写点击图片后放大图片,创建emptyActivity页面

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"/>
</RelativeLayout>
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import javax.microedition.khronos.opengles.GL;
public class emptyActivity extends AppCompatActivity {
    private ImageView img;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_empty);
        img=findViewById(R.id.img);
        String imageUriString = getIntent().getStringExtra("url");
        Glide.with(emptyActivity.this)
                .load(imageUriString)
                .into(img);
    }
}

到此这篇关于Android制作微信添加多个图片,放大图片的文章就介绍到这了,更多相关Android微信添加多个图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android学习笔记——Menu介绍(三)

    Android学习笔记——Menu介绍(三)

    今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
    2014-10-10
  • Android中一个应用实现多个图标的几种方式

    Android中一个应用实现多个图标的几种方式

    这篇文章主要给大家介绍了在Android中一个应用如何实现多个图标的几种方式,其中包括了多Activity + intent-filter方式、activity-alias方式以及网页标签-添加快捷方式,分别给出了详细的示例代码,需要的朋友可以参考借鉴。
    2017-05-05
  • Android Studio使用Profiler来完成内存泄漏的定位

    Android Studio使用Profiler来完成内存泄漏的定位

    这篇文章主要介绍了Android Studio使用Profiler来完成内存泄漏的定位,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下
    2021-03-03
  • Android四大组件之broadcast广播使用讲解

    Android四大组件之broadcast广播使用讲解

    Android开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库,本篇着重介绍广播组件
    2022-12-12
  • Android常用对话框使用大全

    Android常用对话框使用大全

    我们随处可见对话框,该怎么制作?这篇文章主要为大家详细介绍了Android常用对话框使用大全,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android 开发中根据搜索内容实现TextView中的文字部分加粗

    Android 开发中根据搜索内容实现TextView中的文字部分加粗

    最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。实现方法很简单,下面通过本文给大家分享Android 开发中根据搜索内容实现TextView中的文字部分加粗样式,非常不错,需要的朋友参考下
    2017-03-03
  • RecyclerView上拉加载封装代码

    RecyclerView上拉加载封装代码

    这篇文章主要为大家详细介绍了RecyclerView上拉加载封装代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android Picasso使用高斯模糊处理的示例代码

    Android Picasso使用高斯模糊处理的示例代码

    本篇文章主要介绍了Android Picasso使用高斯模糊处理的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 基于Android实现可滚动的环形菜单效果

    基于Android实现可滚动的环形菜单效果

    这篇文章主要为大家详细介绍了Android如何使用kotlin实现可滚动的环形菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Android编程之控件可拖动的实现方法

    Android编程之控件可拖动的实现方法

    这篇文章主要介绍了Android编程之控件可拖动的实现方法,实例分析了Android响应点击及触摸事件的相关技巧,需要的朋友可以参考下
    2016-02-02

最新评论