AndroidStudio

您所在的位置:网站首页 上传多张图片 AndroidStudio

AndroidStudio

2023-03-09 06:44| 来源: 网络整理| 查看: 265

Android studio端

参考文章: 如何简单地利用BITMAP为中介储存图片到数据库中 android开发实现头像上传功能

先实现前端 先添加Tiny框架的依赖 implementation ‘com.zxy.android:tiny:0.1.0’ 然后创建dialog的xml文件dialog_select_photo 然后创建一个空白的activity,在该activity的xml里添加一个按钮(btn_test)和一个ImagView(image)然后是activity里的代码,有些依赖可能会报错,重新导入一下就行 package com.example.academymanageapp; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; import android.app.AlertDialog; import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Base64; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.zxy.tiny.Tiny; import com.zxy.tiny.callback.FileWithBitmapCallback; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; public class PictureActivity extends AppCompatActivity implements View.OnClickListener { //调取系统摄像头的请求码 private static final int MY_ADD_CASE_CALL_PHONE = 6; //打开相册的请求码 private static final int MY_ADD_CASE_CALL_PHONE2 = 7; private AlertDialog.Builder builder; private AlertDialog dialog; private LayoutInflater inflater; private ImageView imageView; private View layout; private TextView takePhotoTV; private TextView choosePhotoTV; private TextView cancelTV; private Button test; public static String pictureString; //获取的转成string类型的图片 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); imageView = findViewById(R.id.image); test = findViewById(R.id.btn_test); test.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { UpdatePhoto(view); } }); } /* 初始化控件方法 */ public void viewInit() { builder = new AlertDialog.Builder(this);//创建对话框 inflater = getLayoutInflater(); layout = inflater.inflate(R.layout.dialog_select_photo, null);//获取自定义布局 builder.setView(layout);//设置对话框的布局 dialog = builder.create();//生成最终的对话框 dialog.show();//显示对话框 takePhotoTV = layout.findViewById(R.id.photograph); choosePhotoTV = layout.findViewById(R.id.photo); cancelTV = layout.findViewById(R.id.cancel); //设置监听 takePhotoTV.setOnClickListener(this); choosePhotoTV.setOnClickListener(this); cancelTV.setOnClickListener(this); } /** * 修改头像按钮执行方法 * @param view */ public void UpdatePhoto(View view) { viewInit(); } private void takePhoto() throws IOException { Intent intent = new Intent(); intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); // 获取文件 File file = createFileIfNeed("UserIcon.png"); //拍照后原图回存入此路径下 Uri uri; if (Build.VERSION.SDK_INT

同时把url里的包名也修改对 在这里插入图片描述 然后就可以了

ps:用虚拟机测试的时候,尝试了几种办法,都没能成功地向相册里导入图片,但是我又需要照片显示到前端,于是换了个思路,将图片压缩后(使用编辑->重新调整大小->像素)再通过在线转码网站,将图片转成base64码后存进数据库里。

插入两个我觉得还蛮好用的网站: 在线图片压缩 - docsmall 在线图片压缩工具,在线图片压缩软件 将 JPG 编码为 Base64 | 免费在线将 JPG 转换为 Base64! 在这里插入图片描述

再补充

做到后面发现还应该给图片添加一个删除功能,效果图如下图: 在这里插入图片描述 即添加一个右上角的按钮,实现点击删除

实现:一开始以为要用浮动按钮,不然按钮(ImageButton)会被挡住,后来发现并不会。所以,只需要在图片按钮的右上角加一个imageButton就行。 然后点击删除弹出一个确认窗口,代码:

//点击删除按钮删除图片 deletePic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(AddActivity.this); builder.setTitle("确定要删除这张图片吗?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.S) @Override public void onClick(DialogInterface dialogInterface, int i) { //直接将存进数据库的东西变为null就行 pictureString = null; //不加这一句的话,会变成空白 imageView.setImageDrawable(getResources().getDrawable(R.drawable.add_picture)); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }).create(); builder.show(); } });

一开始遇到的问题,点击删除后,存进数据库的时候仍有数据,后来发现是因为使用setImageDrawable(null)函数可以将imagView显示的地方清空,但不能清空已获得的数据。思考一番,发现直接令存进数据库的pictureString为空就行。

第二个问题是,使用set函数使imagView处变成空再变成icon后,发现再次添加图片icon不会消失,后来发现不能使用set函数,应该用替换函数imageView.setImageDrawable(getResources().getDrawable(R.drawable.add_picture))。

再次补充

使头像呈圆形的方法:

方法一:使用CycleView 先添加依赖:implementation 'de.hdodenhof:circleimageview:3.0.0' 然后在布局文件里使用

注意这里使用的是src不是srcCompact也不是background,后两者不能正常显示图片

方法二:引用自定义样式的xml文件 创建自定义样式xml文件:(添加在drawable目录下)

然后在自定义xml里:

android:background="@drawable/avatar" app:srcCompat="@drawable/circle_images"

备注:如果使用第一种方法,在代码里使用setImageDrawable可能不好使,这时候换成setBackgroundResource(引用样式)和setBackgroundDrawable(设置默认头像)就好。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3