精华内容
下载资源
问答
  • Android 设置安卓圆形头像
  • 安卓用户头像设置

    2017-03-09 11:51:24
    许多多项目都有用户设置头像的功能。本篇文章就带大家学习一下如何实现用户头像设置。 首先看一下效果。 项目源码:https://github.com/moonfollower/SetHeadPortraitDemo 如上图所示,我们要实现让用户点击 ...

    转载请注明出处:http://blog.csdn.net/qq_35372900/article/details/60957378

    许多多项目都有用户设置头像的功能。本篇文章就带大家学习一下如何实现用户头像设置。

    首先看一下效果。


    项目源码:https://github.com/moonfollower/SetHeadPortraitDemo


    如上图所示,我们要实现让用户点击 ”更换头像“ 按钮时弹出一个窗口,用户可选择使用相机拍照或从手机相册中选择图片作为头像,并对用户确认图片进行截图。最后让切图完成的图片显示在我们的控件上并上传到服务器。

    圆形图片的显示有两种方法,一是自定义圆形ImageView(本文采用此方法),二是将用户截图完成后的图片裁剪成圆形。

    自定义CircleImageView网上有很多文章了,这里就不做解释了。感兴趣的同学可以参考我的Github,网址如下:

    https://github.com/moonfollower/CircleImageView

    弹出框这里是自定义的弹出框,可以根据项目需求进行更改。下面是我的弹出框代码。

    public class ChangeHeadImagePop extends PopupWindow implements View.OnClickListener {
    
        private Activity activity;
        private View popView;
    
        private View v_item1;
        private View v_item2;
        private View v_item3;
    
    
        private OnItemClickListener onItemClickListener;
    
        /**
         *
         * @author moonfolower枚举,用于区分选择了哪个选项
         */
        public enum MENUITEM {
            ITEM1, ITEM2, ITEM3
        }
    
        public ChangeHeadImagePop(final Activity activity) {
            super(activity);
            this.activity = activity;
            LayoutInflater inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            popView = inflater.inflate(R.layout.chose_headimage_popwind, null);// 加载菜单布局文件
            this.setContentView(popView);// 把布局文件添加到popupwindow中
            this.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);// 设置菜单的宽度(需要和菜单于右边距的距离搭配,可以自己调到合适的位置)
            this.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
            this.setFocusable(true);// 获取焦点
            this.setTouchable(true); // 设置PopupWindow可触摸
            this.setOutsideTouchable(true); // 设置非PopupWindow区域可触摸
            ColorDrawable dw = new ColorDrawable(0x00000000);
            this.setBackgroundDrawable(dw);
            this.setOnDismissListener(new OnDismissListener() {
                @Override
                public void onDismiss() {
                    /*setBackgroundAlpha(activity,1f);*/
                }
            });
    
            /*setBackgroundAlpha(activity,0.7f);*/
    
            // 获取选项卡
            v_item1 = popView.findViewById(R.id.camera);
            v_item2 = popView.findViewById(R.id.photoAlbum);
            v_item3 = popView.findViewById(R.id.cancel);
    
            // 添加监听
            v_item1.setOnClickListener(this);
            v_item2.setOnClickListener(this);
            v_item3.setOnClickListener(this);
        }
    
        /**
         * 设置显示的位置
         */
        public void showLocation(View anchorView) {
            /*int windowPos[] = PopupWindowUtil.calculatePopWindowPos(anchorView, popView);
            int xOff = 20; // 可以自己调整偏移
            windowPos[0] -= xOff;*/
            this.showAtLocation(anchorView, Gravity.BOTTOM , 0, 0);
        }
    
        /**
         * 设置背景色
         */
        private void setBackgroundAlpha(Activity context, float bgAlpha) {
            WindowManager.LayoutParams lp = context.getWindow().getAttributes();
            lp.alpha = bgAlpha;
            context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            context.getWindow().setAttributes(lp);
        }
    
        // 点击监听接口
        public interface OnItemClickListener {
             void onClick(MENUITEM item, String str);
        }
    
        // 设置监听
        public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
            this.onItemClickListener = onItemClickListener;
        }
    
        @Override
        public void onClick(View v) {
            MENUITEM menuitem = null;
            String str = "";
            if (v == v_item1) {
                menuitem = MENUITEM.ITEM1;
                str = "选项卡一";
            } else if (v == v_item2) {
                menuitem = MENUITEM.ITEM2;
                str = "选项卡二";
            } else if (v == v_item3) {
                menuitem = MENUITEM.ITEM3;
                str = "选项卡三";
            }
            if (onItemClickListener != null) {
                onItemClickListener.onClick(menuitem, str);
            }
            dismiss();
        }
    }

    XML布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:divider="@drawable/divider"
        android:showDividers = "middle"
        android:background="#fff"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/camera"
            android:text="拍照"
            android:textSize="14sp"
            android:background="@null"
            android:layout_width="match_parent"
            android:layout_height="42dp" />
        <Button
            android:id="@+id/photoAlbum"
            android:background="@null"
            android:text="从手机上获取"
            android:textSize="14sp"
            android:layout_width="match_parent"
            android:layout_height="42dp" />
        <Button
            android:id="@+id/cancel"
            android:background="@null"
            android:text="取消"
            android:textSize="14sp"
            android:layout_width="match_parent"
            android:layout_height="42dp" />
    </LinearLayout>

    LinearLayout分割线,主要加上size属性

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="#f00" />
        <size android:height="1px" />
    </shape>

    有人要说了,讲了半天还没说到头像设置呢?简直是个坑货。别急别急,准备工作必不可少,下面就进入正题。

    1、点击拍照按钮启动相机进行拍照

    首先给我们拍得的照片设置一个地址,方便截图使用。然后打开相机进行拍照。

    注意这里有个坑,某些手机不支持直接修改SD子目录,如果你直接使用

    
     Environment.getExternalStorageDirectory();这个目录,选择相机进行拍照时,拍照完成时,因照片保存失败,导致不能从相机跳转回我们的项目。所以,
    为适配所有手机,建议大家不要把图片保存地址放在SD卡直接子目录中,多写两层文件目录。
    
    
    

    File dir = new File(imageDirPath);
        if(!dir.exists()){
                dir.mkdirs();
          }
    File file = new File(dir,takePhotoImageName);//指定拍照后相片保存地址,以覆盖方式保存。
     Log.e("相机存放图片地址",file.getAbsolutePath());
     iconUri = Uri.fromFile(file);
      // 启动相机
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      // 设置输出路径
     intent.putExtra(MediaStore.EXTRA_OUTPUT, iconUri);
     startActivityForResult(intent, REQUEST_CODE_TAKE_PHOTO);
    
    

    2、选择手机相册中的图片。

    Intent intent2 = new Intent(Intent.ACTION_PICK, null);
    intent2.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
    startActivityForResult(intent2, REQUEST_CODE_CHOOSE_IMAGE);
    
    

    3、对获取到的图片进行截图(更改图片大小,设置图片位置等)。


    /**
         * 裁剪图片
         * @param uri
         */
        public void startCropImage(Uri uri) {
            Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setDataAndType(uri, "image/*");
            // 图片处于可裁剪状态
            intent.putExtra("crop", "true");
            // aspectX aspectY 是宽高的比例
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
            // 是否之处缩放
            intent.putExtra("scale", true);
            // 设置图片的输出大小, 对于普通的头像,应该设置一下,可提高头像的上传速度
            intent.putExtra("outputX", 300);
            intent.putExtra("outputY", 300);
            // 以Uri的方式传递照片
            File dir = new File(imageDirPath);
            if(!dir.exists()){
                dir.mkdirs();
            }
            File crop_image = new File(dir,crop_ImageName);
            cropImageUri = Uri.fromFile(crop_image);
    
            intent.putExtra(MediaStore.EXTRA_OUTPUT, cropImageUri);
            // 设置图片输出格式
            intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
            intent.putExtra("return-data", false);
            // 关闭人脸识别
            intent.putExtra("noFaceDetection", false);
            startActivityForResult(intent, REQUEST_CODE_CROP_IMAGE);
        }
    
    

    在onActivityResult方法中进行操作

     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            // 用户没有进行有效的设置操作,返回
            if (resultCode == RESULT_CANCELED) {
                Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_SHORT).show();
                return;
            }
    
                switch (requestCode){
                    case REQUEST_CODE_TAKE_PHOTO:
                        if(null != iconUri){
                            File file = new File(iconUri.getPath());
    
                            Log.e("文件是否存在",file.exists()+"");
                            // 打开相机页面后,如果按返回键也会回调,所以需要判断是否拍摄了照片
                            if (file.exists()) {
                                // 裁剪图片
                                startCropImage(iconUri);
                            }
                        }
    
                        break;
                    case REQUEST_CODE_CHOOSE_IMAGE:
                        Log.e("相册选择",data.getData()+"");
                        if (data.getData() != null) {
                            iconUri = data.getData();
                            startCropImage(iconUri);
                        }
                        break;
                    case REQUEST_CODE_CROP_IMAGE:
                        Toast.makeText(MainActivity.this,"剪切完毕",Toast.LENGTH_SHORT).show();
                        //上传图片,然后设置图片,这里不上传图片。
                        if(null !=cropImageUri){
                            Log.e("剪切图片地址",cropImageUri.getPath());
                            Bitmap bitmap = BitmapFactory.decodeFile(imageDirPath+File.separator+crop_ImageName);
                            circleImageView.setImageBitmap(bitmap);
                            bitmap.recycle();
                        }
                        break;
                }
        }

    最后是自定义的一些常量,包括图片存放地址,图片文件名和请求码等。

    public static final String imageDirPath = Environment.getExternalStorageDirectory()+"/moon/images";
    public static final String takePhotoImageName = "take_photo.jpg";
    public static final String crop_ImageName = "crop_image.jpg";
     //照相
    private static final int REQUEST_CODE_TAKE_PHOTO = 0;
     //选择图片
     private static final int REQUEST_CODE_CHOOSE_IMAGE = 1;
     //剪切图片
      private static final int REQUEST_CODE_CROP_IMAGE = 2;


    到这里就完成了,是不是很easy,如果不太明白,可以下载源码。

    项目源码:https://github.com/moonfollower/SetHeadPortraitDemo







    展开全文
  • 安卓头像设置

    2017-10-18 14:21:24
    基本上,我们在任何一款安卓成熟的APP中都有头像设置这个功能,今天我就是告诉大家这个是怎么实现的。  首先建个popwindow,然后启动它,选择拍照和或者选取系统照片。  一.拍照: //启动系统的拍照功能 Intent ...

         基本上,我们在任何一款安卓成熟的APP中都有头像设置这个功能,今天我就是告诉大家这个是怎么实现的。

       首先建个popwindow,然后启动它,选择拍照和或者选取系统照片。

        一.拍照:

        //启动系统的拍照功能
                    Intent takephoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    //新建个.jpg文件存放拍照出来的图片
                    uriTemp = Uri.fromFile(new File(fileTemp, "临时.jpg"));
                    takephoto.putExtra(MediaStore.EXTRA_OUTPUT, uriTemp);
                    startActivityForResult(takephoto, photoing);
         二.选取系统文件

     //启动系统给的查询照片功能
                    Intent pic = new Intent(Intent.ACTION_GET_CONTENT);
                    //设置成所有照片类型
                    pic.setType("image/*");
                    startActivityForResult(pic, looking);
                    popupWindow.dismiss();

        三.处理数据

       

     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK) {
                switch (requestCode) {
                    case looking:
                        Uri uri = data.getData();
                        setBitmap(uri);
                        break;
                    case photoing:
                        setBitmap(uriTemp);
                        break;
    
                }
            }
    
        }
        四.压缩图片

     try {
                bitmap = MediaStore.Images.Media.getBitmap(
                        this.getContentResolver(), uri);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            small = PhotoUtil.SizeImage(bitmap);
            head.setImageBitmap(small);
        压缩图片的具体工具类

    public static Bitmap SizeImage(Bitmap image) {
    		ByteArrayOutputStream os = new ByteArrayOutputStream();
    		image.compress(CompressFormat.JPEG, 100, os);
    		while (os.toByteArray().length / 1024 > 1111) {
    			os.reset();
    			image.compress(CompressFormat.JPEG, 50, os);
    		}
    		ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
    		BitmapFactory.Options options = new Options();
    		options.inJustDecodeBounds = true;
    		options.inJustDecodeBounds = false;
    		int h = options.outHeight;
    		int w = options.outWidth;
    		int hh = 666;
    		int ww = 666;
    		int b = 1;
    		if (h > w && h > hh) {
    			b = h / hh;
    		} else if (w > h && w > ww) {
    			b = w / ww;
    		}
    		options.inPreferredConfig = Config.RGB_565;
    		options.inSampleSize = b;
    		is = new ByteArrayInputStream(os.toByteArray());
            Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
    		return bitmap;
    	}
    由于图片要上传和保留在本地,所以对图片进行压缩。由于两种数据返回的是URI(通用资源标志符),再将URI变成bitmap(位图文件),再将bitmap转为图片格式.png。

    五.效果图





    展开全文
  • unity 安卓平台上设置头像

    千次阅读 2016-11-20 16:43:43
    需求是这样的,安卓用户在设置头像时,可以从相册选择或者是拍张图片,然后通过圆形或者是矩形裁剪后,将裁减后的图片当作头像。思路是这样的, 1.在unity上通过jni调用java代码。 2.然后通过Intent去打开安卓手机的...
    需求是这样的,安卓用户在设置头像时,可以从相册选择或者是拍张图片,然后通过圆形或者是矩形裁剪后,将裁减后的图片当作头像。
    
    思路是这样的,
    1.在unity上通过jni调用java代码。
    2.然后通过Intent去打开安卓手机的摄像机或是相册,选择一张图片后,接着进行圆形或是矩形裁剪。
    3.然后将裁剪后的图片保存到指定的一个路径下,接着调用Unity的方法,并将图片路径传过去。
    4.这时在unity上就可以通过www去下载这张图片了,将下载下来的图片赋给一个texture,这样我们就完成了大致的流程了。
    
    **这里有涉及到几处难点**
    1.unity与java的通信,大家可以参考的我另一篇文章http://blog.csdn.net/strivero/article/details/53169679 
    
    2.对图片进行圆形裁剪,这个我参考了雨松的文章http://www.xuanyusong.com/archives/1480
    3.对图片进行矩形裁剪,这个我参考了http://blog.csdn.net/lmj623565791/article/details/39761281
    

    最后附上的我的项目http://pan.baidu.com/s/1kV374rX 密码:wx95

    展开全文
  • android设置头像 裁剪以后 重启安卓应用头像消失未保存 请问改怎么保存这个头头像 附图几张 分别是开启后设置头像 然后重启后头像没了 ![图片说明]...
  • 图片剪裁头像设置.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android开发中拍照,选择图库后并且裁剪 然后压缩图片之后将头像上传到服务器,里面有适配6.0权限工具类,上传文件工具类,拍照设置头像功能,很简单的实现。
  • 本项目是一个安卓设置头像的小例子源码,可以从图库选择或者摄像头拍照获取图片并具有截取功能,功能完美实现可以直接使用。
  • 本项目是一个安卓设置头像的小例子源码,可以从图库选择或者摄像头拍照获取图片并具有截取功能,功能完美实现可以直接使用。
  • 免费素材 3rs Photoshop合成教程制作超酷的机器人效果 先看看效果图 打开原图 首先在photoshop中加载照片 将主体抠出,加载到黑色与深灰色渐变的背景图中 将素材边缘的白边用橡皮工具设置笔刷为 不透明度设置为40....
  • * 1、实现原理:用户打开相册或相机选择相片后,相片经过压缩并设置在控件上,图片在本地sd卡存一份(如果有的话,没有则内部存储,所以还 * 需要判断用户是否挂载了sd卡),然后在服务器上存储一份该图片,当下次再次启动...
    
    
    /**
     * 1、实现原理:用户打开相册或相机选择相片后,相片经过压缩并设置在控件上,图片在本地sd卡存一份(如果有的话,没有则内部存储,所以还
     * 需要判断用户是否挂载了sd卡),然后在服务器上存储一份该图片,当下次再次启动应用时,会默认去sd卡加载该图片,如果本地没有,再会去联网请求
     * 2、使用了picasso框架以及自定义BitmapUtils工具类
     * 3、记得加上相关权限
     * <uses-permission android:name="android.permission.INTERNET"></uses-permission>
     <uses-permission android:name="android.permission.CAMERA"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
     * */
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private ImageView iv;//要设置的头像
        private Button btn_photo;//调用相册按钮
        private Button btn_camera;//调用相机按钮
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            iv=(ImageView) findViewById(R.id.iv);
            btn_photo = (Button) findViewById(R.id.btn_photo);
            btn_camera = (Button) findViewById(R.id.btn_camera);
    
            btn_photo.setOnClickListener(this);
            btn_camera.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_photo://打开系统相册
                    Intent intent=new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(intent,100);
                    break;
                case R.id.btn_camera://打开系统相机
                    Intent intent2=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(intent2,200);
                    break;
            }
        }
    
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if(requestCode==100&&resultCode==RESULT_OK&&data!=null){//系统相册
                Uri imageData = data.getData();
                String path=getPath(imageData);
                Bitmap bitmap = BitmapFactory.decodeFile(path);
                Bitmap bitmap1 = BitmapUtils.zoom(bitmap, iv.getWidth(), iv.getHeight());
                Bitmap bitmap2 = BitmapUtils.circleBitmap(bitmap1);
                //加载显示
                iv.setImageBitmap(bitmap2);
    
                //bitmap图片上传到服务器......
    
                //bitmap图片保存到本地
                saveImage(bitmap2);
            }else if(requestCode==200&&resultCode==RESULT_OK&&data!=null){//系统相机
                Bitmap bitmap = (Bitmap) data.getExtras().get("data");
                BitmapUtils.zoom(bitmap,iv.getWidth(),iv.getHeight());
                bitmap=BitmapUtils.circleBitmap(bitmap);
    
                //加载显示
                iv.setImageBitmap(bitmap);
    
                //bitmap图片上传到服务器......
    
                //bitmap图片保存到本地
                saveImage(bitmap);
            }
        }
    
        /**
         * 数据的存储。(5种)
         * Bimap:内存层面的图片对象。
         *
         * 存储--->内存:
         *      BitmapFactory.decodeFile(String filePath);
         *      BitmapFactory.decodeStream(InputStream is);
         * 内存--->存储:
         *      bitmap.compress(Bitmap.CompressFormat.PNG,100,OutputStream os);
         */
        private void saveImage(Bitmap bitmap) {
            File filesDir;
            if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断sd卡是否挂载
                //路径1:storage/sdcard/Android/data/包名/files
                filesDir = this.getExternalFilesDir("");
    
            }else{//手机内部存储
                //路径:data/data/包名/files
                filesDir = this.getFilesDir();
    
            }
            FileOutputStream fos = null;
            try {
                File file = new File(filesDir,"icon.png");
                fos = new FileOutputStream(file);
    
                bitmap.compress(Bitmap.CompressFormat.PNG, 100,fos);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }finally{
                if(fos != null){
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        //如果本地有,就不需要再去联网去请求
        private boolean readImage() {
            File filesDir;
            if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断sd卡是否挂载
                //路径1:storage/sdcard/Android/data/包名/files
                filesDir = getExternalFilesDir("");
    
            }else{//手机内部存储
                //路径:data/data/包名/files
                filesDir = getFilesDir();
    
            }
            File file = new File(filesDir,"icon.png");
            if(file.exists()){
                //存储--->内存
                Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
                iv.setImageBitmap(bitmap);
                return true;
            }
            return false;
    
        }
    
    
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        private String getPath(Uri uri) {
            int sdkVersion = Build.VERSION.SDK_INT;
            //高于4.4.2的版本
            if (sdkVersion >= 19) {
                Log.e("TAG", "uri auth: " + uri.getAuthority());
                if (isExternalStorageDocument(uri)) {
                    String docId = DocumentsContract.getDocumentId(uri);
                    String[] split = docId.split(":");
                    String type = split[0];
                    if ("primary".equalsIgnoreCase(type)) {
                        return Environment.getExternalStorageDirectory() + "/" + split[1];
                    }
                } else if (isDownloadsDocument(uri)) {
                    final String id = DocumentsContract.getDocumentId(uri);
                    final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
                            Long.valueOf(id));
                    return getDataColumn(this, contentUri, null, null);
                } else if (isMediaDocument(uri)) {
                    final String docId = DocumentsContract.getDocumentId(uri);
                    final String[] split = docId.split(":");
                    final String type = split[0];
    
                    Uri contentUri = null;
                    if ("image".equals(type)) {
                        contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                    } else if ("video".equals(type)) {
                        contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                    } else if ("audio".equals(type)) {
                        contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                    }
                    final String selection = "_id=?";
                    final String[] selectionArgs = new String[]{split[1]};
                    return getDataColumn(this, contentUri, selection, selectionArgs);
                } else if (isMedia(uri)) {
                    String[] proj = {MediaStore.Images.Media.DATA};
                    Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null);
                    int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    actualimagecursor.moveToFirst();
                    return actualimagecursor.getString(actual_image_column_index);
                }
    
    
            } else if ("content".equalsIgnoreCase(uri.getScheme())) {
                // Return the remote address
                if (isGooglePhotosUri(uri))
                    return uri.getLastPathSegment();
                return getDataColumn(this, uri, null, null);
            }
            // File
            else if ("file".equalsIgnoreCase(uri.getScheme())) {
                return uri.getPath();
            }
            return null;
        }
    
        /**
         * uri路径查询字段
         *
         * @param context
         * @param uri
         * @param selection
         * @param selectionArgs
         * @return
         */
        public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
            Cursor cursor = null;
            final String column = "_data";
            final String[] projection = {column};
            try {
                cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
                if (cursor != null && cursor.moveToFirst()) {
                    final int index = cursor.getColumnIndexOrThrow(column);
                    return cursor.getString(index);
                }
            } finally {
                if (cursor != null)
                    cursor.close();
            }
            return null;
        }
    
    
        private boolean isExternalStorageDocument(Uri uri) {
            return "com.android.externalstorage.documents".equals(uri.getAuthority());
        }
    
        public static boolean isDownloadsDocument(Uri uri) {
            return "com.android.providers.downloads.documents".equals(uri.getAuthority());
        }
    
        public static boolean isMediaDocument(Uri uri) {
            return "com.android.providers.media.documents".equals(uri.getAuthority());
        }
    
        public static boolean isMedia(Uri uri) {
            return "media".equals(uri.getAuthority());
        }
    
        /**
         * @param uri The Uri to check.
         * @return Whether the Uri authority is Google Photos.
         */
        public static boolean isGooglePhotosUri(Uri uri) {
            return "com.google.android.apps.photos.content".equals(uri.getAuthority());
        }
    
        
        /**
         * 判断本地是否有该图片,没有则去联网请求
         * */
        @Override
        protected void onResume() {
            super.onResume();
            if(readImage()){
                return;
            }
        }
    }
    
    
    //BitmapUtils工具类
    public class BitmapUtils {
    	/**
         	* 该方法用于将图片进行圆形处理
         	* */
    public static Bitmap circleBitmap(Bitmap source){ //默认只对宽进行处理 int width=source.getWidth(); Bitmap bitmap=Bitmap.createBitmap(width,width,Bitmap.Config.ARGB_8888); Canvas canvas=new Canvas(bitmap); Paint paint=new Paint(); //设置抗锯齿 paint.setAntiAlias(true); canvas.drawCircle(width/2,width/2,width/2,paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(source,0,0,paint); return bitmap; } /** * 该方法用于图片压缩处理,注意width、height参数的类型必须是float * */ public static Bitmap zoom(Bitmap source,float width,float height){ Matrix matrix=new Matrix(); //图片进行压缩处理 matrix.postScale(width/source.getWidth(),height/source.getHeight()); Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, false); return bitmap; }}
    展开全文
  • QQ透明头像网上有很多以前...只需安卓手机就可以实现头像透明设置,也可设置QQ动态头像!!废话不多说软件分享给大家,使用简单,大家可自行研究! 效果图: 软件下载:https://wuzuhua.cn/2019/01/24/tmtx.html ...
  • 在制作自定义圆形头像时如何像qq设置圆形头像一样可以让图片不移出圆形区域? 我尝试的判断图片左上角坐标和右下角坐标有没有在圆形区域内方法图片都会不停的 闪,这种方法不太好,有什么推荐的方法,求助~
  • 对各种图片进行压缩,压缩不失真。大图片压缩后最小可在50k以内,可以根据自己的需求进行设置图片压缩后的大小.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 前言前些天QQ透明头像的会员上传接口被关闭了,研究了几天终于又找到一种方法,现分享给大家,此方法QQ会员和非会员都可以使用这个方法需要用到一款APP,APP是我亲自编写的,所以不用担心安全问题,这个APP只能运行...
  • 1.添加依赖库 ... 2.在xml文件引用OK app:riv_border_color="#00000000"//设置边框颜色 app:riv_border_width=“2dip”//设置边框宽度 app:riv_corner_radius=“30dip” //设置角的弧度 <com...
  • 目前安卓手机版敬业签新增了添加小账本记账的功能,有的用户表示自己想为创建的小账本设置密码,以增加账本的安全性。下面我们就以在安卓华为手机端操作为例,讲一下安卓手机便签敬业签中怎么为已创建的小账本设置...
  • ☾每晚20:00请记得打开手机,查收我的礼物iPhone手机壁纸(苹果壁纸,安卓壁纸)抖音壁纸潮图,最近比较火的壁纸)保存方法:点击图片-长按图片-保存图片,保存完毕返回相册即可设置为手机壁纸!由于均为高清壁纸,...
  • 项目中都会用到头像设置,所以记录一下 效果图: 在android 6.0推出了运行时权限,我们获取用户手机权限就没那么方便了,先说说运行时权限: Permission,运行时权限 授权权限 *如果设备运行的是Android 6(API...
  • 以前我们分享过QQ透明头像设置的方法,但是有些小问题,QQ会员设置透明头像会失败,显示白色~经过不断鼓捣,终于完美解决了! 首先,需要使用安卓手机和透明头像助手APP~ 为了本次更新,专门充值开通了QQ会员测试~...
  • 我们在做项目时,经常会要求App有更改用户头像的功能。那么怎么才能做到这一点呢?下面,我就仿照迷你飞信,来带领大家设计这一功能。 步骤: 1.自定义主布局; 2.自定义AlterDialog 3.在主程序中设置Listener ...
  • ,很多朋友看见这个小功能,肯定觉得特简单,就是两张图片叠在一起嘛,用个RelaiveLayout或者其他布局一下就搞定了 , 没错 , 是很简单,但是如果需要动态设置这个头像的大小,而且很多地方用到的话,在每个地方都...
  • 今天给大家带来一款特别的姓氏头像工具,可以给你的头像右下角加上自己的姓氏,速看效果! 是不是还蛮特别的?无论是安卓还是iOS用户都可以使用,接下来就教大家怎么操作。 小贴士:工具获取方式在微信公众号【一页...
  • 前言前些天QQ透明头像的会员上传接口被关闭了,研究了几天终于又找到一种方法,现分享给大家,此方法QQ会员和非会员都可以使用这个方法需要用到一款APP,APP是我亲自编写的,所以不用担心安全问题,这个APP只能运行...
  • 主题壁纸美化是一款非常实用的手机壁纸软件,海量图片素材可以包揽你的桌面、头像、背景图等等,主题壁纸美化安卓版(DIY定制)还有特殊的透明壁纸,可以设置个性挂件,让你的桌面动起来,感兴趣的小伙伴快来下载主题...
  • 转载博客地址: ... 里面有三种方法实现,自己测试得到...第一种方法能实现竖屏全屏,并且头像正常显示 第二种方法能实现竖屏全屏,但是头像是倒立着的 第三种方法实现没有找到有onTauch方法,同时运行之后,一直
  • 需求就是棋牌类的游戏,玩家的个人资料中包括自己的头像而且可以浏览相册中的图片或者使用相机拍照设置。关于这个问题我也查阅一些资料,由于涉及安卓部分知识,首先要了解Unity和安卓是如何通信的。首先看到的...
  • 透明微信头像名称

    千次阅读 2018-06-01 11:40:49
    适用系统:Andriod(iOS在安卓设置也会看到同样效果) 操作步骤〜1.透明昵称在首先文末电子杂志工具,复制昵称括号中的空白字符。接着在微信昵称设置中删掉自己之前的昵称,将复制的空白昵称粘贴进去,最后保存...
  • 安卓人脸检测之FaceDetector

    千次阅读 2017-08-15 11:53:23
    最近看到一个APP的头像上传时,如果你设置的图片里面没有人脸,或者有两张以及以上人脸的时候,会提示你图片不符合规范,让你重新设置,这样是为了确保用户的头像是人! 然后我就在网上查看了一下资料,发现谷歌...

空空如也

空空如也

1 2 3 4 5
收藏数 97
精华内容 38
关键字:

安卓设置头像