[Android] 通过GridView仿微信动态添加本地图片示例代码

yizhihongxing

下面我将为您详细讲解 “[Android] 通过GridView仿微信动态添加本地图片示例代码”的完整攻略。

1. 确定需求

在开始编写代码之前,我们需要明确自己的需求。本篇攻略的目的是通过GridView来仿照微信动态添加本地图片的功能。我们需要实现以下功能:

  • 显示本地图片的缩略图
  • 点击图片后可以查看其大图
  • 长按图片后可以删除该图片
  • 可以添加新的本地图片

2. 创建GridView布局

我们现在需要创建一个布局,用来显示我们的GridView。在XML文件中定义GridView,然后再为其创建一个adapter,将图片添加到GridView中。可以参考以下示例:

<GridView
    android:id="@+id/gridview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numColumns="3"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    android:stretchMode="columnWidth" />

接下来我们需要创建GridView的adapter。在adapter中,我们需要重写getView方法。可以参考以下示例:

public class GridImageAdapter extends BaseAdapter {
    private Context mContext;
    private List<String> mImages;

    public GridImageAdapter(Context context, List<String> images) {
        this.mContext = context;
        this.mImages = images;
    }

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

    @Override
    public Object getItem(int position) {
        return mImages.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 250));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        Glide.with(mContext).load(mImages.get(position)).into(imageView);
        return imageView;
    }
}

3. 为GridView添加图片

现在我们已经完成了GridView和adapter的创建,接下来我们需要将图片添加到GridView中。为了添加图片,我们可以创建一个按钮,并且在按钮点击后打开文件选择器,并选取需要添加的图片。具体实现可以参考以下示例:

private List<String> mImages = new ArrayList<>();
private GridImageAdapter mAdapter;

// 创建添加按钮,并且设置点击事件
findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, 1);
    }
});

// 在 onActivityResult 方法中处理选取的图片,将图片添加到集合中,并刷新 GridView
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        String path = getPath(this, data.getData());
        mImages.add(path);
        mAdapter.notifyDataSetChanged();
    }
}

// 获取文件的路径
public static String getPath(Context context, Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String filePath = cursor.getString(column_index);
    cursor.close();
    return filePath;
}

这里我使用了一个名为“btn_add”的按钮,当我们点击该按钮时,将会打开文件选择器,允许我们选择要添加的本地图片。然后在onActivityResult方法中,根据返回的Intent对象获取选择的文件路径,并将路径添加到mImages集合中,再刷新GridView即可。如此一来,我们已经实现了添加本地图片的功能。

4. 查看大图和删除图片

接下来,我们需要为GridView添加上 “查看大图” 和 “删除图片” 的功能。

查看大图

我们可以在adapter中,为每一个图片添加点击事件,并且在点击事件中跳转到显示大图的页面。具体实现可以参考以下代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ……
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(mContext, ImageActivity.class);
            intent.putExtra("imagePath", mImages.get(position));
            mContext.startActivity(intent);
        }
    });
    return imageView;
}

这里我创建了一个新的类名为ImageActivity,并将需要显示的图片路径通过Intent对象传递给ImageActivity。在ImageActivity中,我们可以将图片绘制到ImageView中,具体实现可以参考以下代码:

public class ImageActivity extends AppCompatActivity {
    private ImageView mImage;

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

        mImage = findViewById(R.id.image);

        String imagePath = getIntent().getStringExtra("imagePath");

        Glide.with(this).load(imagePath).into(mImage);
    }
}

删除图片

我们可以在adapter中,为每一个图片添加长按事件,并且在长按事件中弹出对话框,询问用户是否删除该图片。具体实现可以参考以下代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ……
    imageView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle("确认删除?");
            builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    mImages.remove(position);
                    mAdapter.notifyDataSetChanged();
                }
            });
            builder.setNegativeButton("否", null);
            builder.show();
            return true;
        }
    });
    return imageView;
}

这里我为ImageView添加了一个长按事件,并弹出对话框,询问用户是否删除该图片。在用户点击了“是”,并确定删除该图片后,我们可以通过mImages.remove(position)方法将该图片从数据源中删除,然后再调用mAdapter.notifyDataSetChanged()方法来刷新GridView即可。

至此,我们已经实现了“查看大图”和“删除图片”的功能,完成了我们的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:[Android] 通过GridView仿微信动态添加本地图片示例代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • Discuz!nt 源文件变成乱码的解决方法

    解决 Discuz!nt 源文件变成乱码的方法 最近,在操作 Discuz!nt 程序时,很多用户反馈他们的源文件经常会出现乱码,为了解决这个问题,我们总结了以下方法: 方法一:正确设置字符编码 确认你当前的操作系统和编辑器的默认字符编码是 UTF-8。 在 Discuz!nt 站点后台管理中心的【全局】-【字符集设置】中将 字符集编码 和 页面编码 都设置…

    html 2023年5月31日
    00
  • Android apk反编译基础(apktoos)图文教程

    首先我们来详细讲解“Android apk反编译基础(apktoos)图文教程”的完整攻略。 一、前言 在进行apk应用开发或分析的时候,我们有时候需要对apk进行反编译以获取其中的代码、资源等信息。这个时候,APKTool这个工具就非常有用。APKTool是一个可以反编译和重新打包APK的开源工具,可以将一个APK文件解包为一个文件夹,包括资源文件和编译后…

    html 2023年5月30日
    00
  • 一个asp版XMLDOM操作类

    下面是 “一个asp版XMLDOM操作类”的完整攻略,包含以下内容: 一、XMLDOM操作类的作用和使用场景 XMLDOM操作类是一个ASP语言编写的操作XML文档的类,它可以用于读取、修改、创建XML文档。使用XMLDOM操作类可以方便地完成对XML文档的解析和处理。 XMLDOM操作类的使用场景包括: 读取XML配置文件并获取其中的配置信息; 创建、修改…

    html 2023年5月30日
    00
  • 新人在抖音里开直播怎么操作

    以下是“新人在抖音里开直播怎么操作”的完整攻略: 新人在抖音里开直播怎么操作? 在抖音里开直播是一种新型的社交方式,可以让用户通过直播与粉丝互动、分享生活、展示才艺等。以下是一些操作步骤和攻略。 步骤1:了解抖音直播的基本概念 在开始抖音直播之前,需要了解一些基本概念,包括: 抖音:一款流行的短视频应用程序。 直播:一种实时的视频直播方式,可以让用户与粉丝互…

    html 2023年5月18日
    00
  • PHP XML操作类DOMDocument

    当涉及到在PHP中处理XML文档时,DOMDocument是一种非常强大的类。DOMDocument类允许您在XML文档的树形结构中操作元素,节点和文本。下面是DOMDocument类的详细攻略,包括创建DOMDocument对象、添加子元素、读取/修改元素值、删除元素等操作。 创建DOMDocument对象 要在PHP中操作XML文档,需要首先创建DOMD…

    html 2023年5月30日
    00
  • Python根据指定文件生成XML的方法

    生成XML文件是Python中常见的任务之一,下面我将给出一些步骤和示例,帮助你完成这个任务。 1. 安装相关包 首先,你需要确保你的Python环境中安装了需要的包。 使用 pip 安装一些需要的包: pip install xmltodict 2. 读取指定的文件并转换成字典格式 使用 xmltodict 包将指定的文件转换成字典格式: import x…

    html 2023年5月30日
    00
  • 小米忘记密码怎么办,小米手机忘记密码解决方法

    以下是小米手机忘记密码的解决方法: 使用MI账号找回密码:如果您的小米手机绑定了MI账号,您可以使用MI账号找回密码。请按照以下步骤进行操作: 打开小米手机的MI账号登录页面。 点击“忘记密码”链接。 输入您的MI账号和注册时使用的手机号码。 按照提示操作,重置您的MI账号密码。 使用新密码登录您的小米手机。 使用Google账号找回密码:如果您的小米手机绑…

    html 2023年5月17日
    00
  • xflash基础语法

    xflash是一种基于Flash的多媒体交互式课件制作软件。下面详细讲解一下xflash的基础语法: xflash基础语法 创建场景 在xflash中,场景是课件的基本组成部分。要创建场景,可以按照如下的语法: # 创建一个名为场景1的场景 [scene=场景1] 添加文本 xflash可以添加各种文本内容,包括标题、正文、列表等。要添加文本,可以按照如下的…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部