相机和CircleImageView的使用

news/2024/7/7 15:23:45

首先第一步:导入包:compile 'de.hdodenhof:circleimageview:2.1.0'各位可以去这个网址看这个控件的介绍https://github.com/hdodenhof/CircleImageView

布局:

<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/add_pic"
    app:civ_border_color="@color/colorPrimary"
    app:civ_border_width="2dp"/>
逻辑处理:
 
public static final String PHOTO_IMAGE_FILE_NAME = "fileImg.jpg";
public static final int CAMERA_REQUEST_CODE = 100;
public static final int IMAGE_REQUEST_CODE = 101;
public static final int RESULT_REQUEST_CODE = 102;
private File tempFile = null;

//跳转相册
private void toPicture() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    startActivityForResult(intent, IMAGE_REQUEST_CODE);
    dialog.dismiss();
}
//获得返回的数据
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != getActivity().RESULT_CANCELED) {
        switch (requestCode) {
            //相册数据
            case IMAGE_REQUEST_CODE:
                startPhotoZoom(data.getData());
                break;
            //相机数据
            case CAMERA_REQUEST_CODE:
                tempFile = new File(Environment.getExternalStorageDirectory(), PHOTO_IMAGE_FILE_NAME);
                startPhotoZoom(Uri.fromFile(tempFile));
                break;
            case RESULT_REQUEST_CODE:
                //有可能点击舍弃
                if (data != null) {
                    //拿到图片设置
                    setImageToView(data);
                    //既然已经设置了图片,我们原先的就应该删除
                    if (tempFile != null) {
                        tempFile.delete();
                    }
                }
                break;
        }
    }
}

//裁剪
private void startPhotoZoom(Uri uri) {
    if (uri == null) {
        L.e("uri == null");
        return;
    }
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    //设置裁剪
    intent.putExtra("crop", "true");
    //裁剪宽高比例
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    //裁剪图片的质量
    intent.putExtra("outputX", 320);
    intent.putExtra("outputY", 320);
    //发送数据
    intent.putExtra("return-data", true);
    startActivityForResult(intent, RESULT_REQUEST_CODE);
}

//设置图片
private void setImageToView(Intent data) {
    Bundle bundle = data.getExtras();
    if (bundle != null) {
        Bitmap bitmap = bundle.getParcelable("data");
        profile_image.setImageBitmap(bitmap);
    }
}

当返回的时候图片会消失,为了解决这个问题,可以在onDestory()方法中去保存数据,至于上面的dialog是自定义的一个dialog,大家可以参看我之前的文章
保存:
@Override
public void onDestroy() {
    super.onDestroy();
    //保存
    BitmapDrawable drawable = (BitmapDrawable) profile_image.getDrawable();
    Bitmap bitmap = drawable.getBitmap();
    //第一步:将Bitmap压缩成字节数组输出流
    ByteArrayOutputStream byStream=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,80,byStream);
    //第二步:利用Base64将我们的字节数组输出流转换成String
    byte[] bytes = byStream.toByteArray();
    String imgString  = new String(Base64.encodeToString(bytes, Base64.DEFAULT));
    //第三步:将String保存shareUtils
    ShareUtils.putString(getActivity(), "image_title", imgString);
}

对于ShareUtils的使用也可以参看我之前写的一篇工具类
接下来就是获取数据
//1.拿到string
String imgString = ShareUtils.getString(getActivity(), "image_title", "");
if (!imgString.equals("")) {
    //2.利用Base64将我们string转换
    byte[] bytes = Base64.decode(imgString, Base64.DEFAULT);
   ByteArrayInputStream byStream = new ByteArrayInputStream(bytes);
    Bitmap bitmap = BitmapFactory.decodeStream(byStream);
    profile_image.setImageBitmap(bitmap);
}
这样就完成了相机调用和相册的调用


http://www.niftyadmin.cn/n/3649417.html

相关文章

如何为Visual Studio Code创建扩展包

介绍 (Introduction) Extension Packs in Visual Studio Code are useful when you want to install a collection of related extensions. In this article, you’ll create an Extension Pack so you can share your collection of extensions with other developers. 当您要…

Android如何获取APP启动时间

Android平台上&#xff0c;一个App的启动时间可以说是一个重要的性能指标。如何获取一个App的启动时间呢&#xff0c;接下来咱们详细探讨一下。 在查阅Android的文档之后发现&#xff0c;Android的shell命令里面是有这个功能的&#xff0c;打开adb&#xff0c;输入以下命令 am是…

分享我的第一个Web作品——纯静态网站

以下是一年前学习Web基础开发时候的期末作品——计算机学习网。当时刚开始学习HTML和CSS。 网站采用HTMLCSSJavaScript的架构设计&#xff0c;当时大概用了12天左右&#xff0c;当然这12天还在上其他的课&#xff0c;这是利用课余时间做的。网站包括主页、内容页、登录和注册页…

javascript闭包_JavaScript的闭包和咖喱介绍

javascript闭包介绍 (Introduction) If you write code in JavaScript it’s quite likely you have come across the term closure, which is a useful yet often confusing concept. But just what is a closure? 如果您使用JavaScript编写代码&#xff0c;很可能会遇到术语…

GitHub上史上最全的Android开源项目分类汇总(一)

今天晚上配置好GitHub&#xff0c;顺便看看KJFrame,发现有很多的Git资源&#xff0c;下面有很多让人欣喜的效果&#xff0c;大家抓紧搬轮子~~ 浩 2014-11-26 今天在看博客的时候&#xff0c;无意中发现了Trinea在GitHub上的一个项目Android开源项目分类汇总&#xff0c;由于…

Windows安装OpenSSH服务-远程连接Linux

OpenSSH是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制&#xff0c; 或在计算机之间传送文件。而实现此功能的传统方式&#xff0c;如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的&#xff0c;并且会使用明文传送密码。OpenSSH提…

Picasso的封装(二)

public class PicassoUtils {//默认加载图片public static void loadImaheView(Context mContext, String url, ImageView imageView) {Picasso.with(mContext).load(url).into(imageView);}//默认加载图片(指定大小)public static void loadImageViewSize(Context mContext, S…

如何创建您的第一个Visual Studio代码扩展

介绍 (Introduction) Visual Studio Code is a code editor from Microsoft available on Windows, Linux, and macOS. It offers extensions that you can install through the Visual Studio Code MarketPlace for additional features in your editor. When you can’t find…