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

下面我将为您详细讲解 “[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日

相关文章

  • C#中如何使用 XmlReader 读取XML文件

    C#中可以通过XmlReader类来读取XML文件,以下是使用XmlReader类读取XML文件的完整攻略: 1. 添加命名空间 在开始使用XmlReader之前,需要添加System.Xml命名空间,代码如下: using System.Xml; 2. 创建XmlReader实例 在打开XML文件之前,需要创建一个XmlReader实例,代码如下: Xml…

    html 2023年5月30日
    00
  • MyBatis中criteria的or(或查询)语法说明

    首先,MyBatis中的criteria是用于构造SQL语句的查询条件的一种方式。其中,or语法可以使查询条件在多个条件之间取或(或者)的关系。具体用法如下: 1. or语法示例一 Example example = new Example(User.class); Example.Criteria criteria = example.createCrit…

    html 2023年5月30日
    00
  • qsv格式怎么转为mp4格式?奇艺qsv格式转换mp4方法

    以下是“qsv格式怎么转为mp4格式?奇艺qsv格式转换mp4方法”的完整攻略: qsv格式怎么转为mp4格式?奇艺qsv格式转换mp4方法 QSV格式是奇艺视频播放器专用的格式,用户可以在奇艺视频播放器中播放QSV格式的视频。但是,有时候用户需要将QSV格式的视频转换为MP4格式,以便更好地在其他设备上播放。下面是QSV格式转换为MP4格式的具体步骤。 步…

    html 2023年5月18日
    00
  • PHP操作XML中XPath的应用示例

    下面为你详细讲解“PHP操作XML中XPath的应用示例”的完整攻略。 简介 XPath 是一种在 XML 文档中进行导航和查找信息的语言,其中最重要的功能是路径表达式。在 PHP 中,我们可以使用 SimpleXML 扩展库来读取 XML 文件,并使用 XPath 来查询需要的节点信息。 安装 SimpleXML 要在 PHP 中使用 SimpleXML,…

    html 2023年5月30日
    00
  • 在抖音直播游戏赚钱吗?怎么赚钱

    以下是“在抖音直播游戏赚钱吗?怎么赚钱”的完整攻略: 在抖音直播游戏赚钱吗?怎么赚钱 抖音直播是一款非常受欢迎的直播平台,许多用户在平台上直播游戏,并通过直播赚钱。下面是在抖音直播游戏赚钱的攻略。 直播游戏 直播游戏是在抖音直播赚钱的主要途径之一。许多用户在抖音直播平台上直播游戏,吸引粉丝观看,并通过打赏、礼物等方式获得收益。直播游戏需要注意以下几点: 选择…

    html 2023年5月18日
    00
  • C++实现读写ini配置文件的示例代码

    首先,INI文件是一种非常常见的配置文件格式,它用于存储应用程序的配置信息。在C++中,使用WinAPI中的GetPrivateProfileString和WritePrivateProfileString函数可以方便地读取和写入INI文件。 下面是使用C++实现读写INI配置文件的示例代码和详细攻略: 读取INI配置文件 第一步:包含相关头文件 #incl…

    html 2023年5月30日
    00
  • 一文详解HTML中script 标签的属性

    当我们需要在HTML页面中添加JavaScript代码时,可以使用<script>标签。<script>标签可以将JavaScript代码直接嵌入到HTML页面中,或者引用一个外部JavaScript文件,它具有如下属性: type属性 type属性指定脚本语言的MIME类型。<script>默认type属性是Text/J…

    html 2023年5月30日
    00
  • mybatis xml文件热加载实现示例详解

    下面我将为您详细讲解“mybatis xml文件热加载实现示例详解”的攻略。 一、什么是mybatis xml文件热加载? mybatis xml文件热加载是指在mybatis项目运行时,可以动态修改对应的mapper.xml文件后,自动刷新SqlSessionFactory,实现数据库操作的实时更新,而不需要重新启动应用。 二、mybatis xml文件热…

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