仿抖音短视频APP源码,实现简单的换头像并保存
时间:2022-07-27
本文章向大家介绍仿抖音短视频APP源码,实现简单的换头像并保存,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
public class My_info extends AppCompatActivity implements View.OnClickListener {
private static final int CHOOSE_PHOTO=2;
private CircleImageView image;//一种用于图片圆形化的控件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_info);
image=(CircleImageView)findViewById(R.id.p_pic);
if(readPac()!=null){
image.setImageBitmap(readPac());//如果头像修改过了,内存中已经新的头像图片。
}
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.alter: //点击修改头像事件
/
if(ContextCompat.checkSelfPermission(My_info.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.
PERMISSION_GRANTED){
ActivityCompat.requestPermissions(My_info.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
//以上是访问图库的运行时权限/
}else
{
open();//打开图库
}
break;
default: break;
}
}
@Override
//这里是对用户是否同意访问图库的处理
public void onRequestPermissionsResult(int requestCode,String[] permissions,int [] grantResults){
switch (requestCode){
case 1:
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
open();
}else{
Toast.makeText(My_info.this,"您拒绝了权限",Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
//打开图库
private void open(){
Intent intent=new Intent("android.intent.action.GET_CONTENT");
intent.setType("image/*");
startActivityForResult(intent,CHOOSE_PHOTO);
}
//
@Override
protected void onActivityResult(int requestCode,int reultCode,Intent data){
switch (requestCode){
case CHOOSE_PHOTO:
if(reultCode==RESULT_OK){
handle(data);
}
break;
}
}
private void handle(Intent data){
String imagePath=null;
Uri uri=data.getData();
if(DocumentsContract.isDocumentUri(this,uri)){
String docId=DocumentsContract.getDocumentId(uri);
/ if("com.android.providers.media.documents".equals(uri.getAuthority())){
String id=docId.split(":")[1];
String selection= MediaStore.Images.Media._ID+"="+id;
imagePath=getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,selection);
}else if("com.android.providers.dowmloads.documents".equals(uri.getAuthority())){
Uri contentUri= ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),Long.valueOf(docId));
imagePath=getImagePath(contentUri,null);
}else if("content".equalsIgnoreCase(uri.getScheme())){
imagePath=getImagePath(uri,null);
}else if("file".equalsIgnoreCase(uri.getScheme())){
imagePath=uri.getPath();
}
displayImage(imagePath);
}
}
private String getImagePath(Uri uri,String selection){
String path=null;
Cursor cursor=getContentResolver().query(uri,null,selection,null,null);
if(cursor!=null){
if(cursor.moveToFirst()){
path=cursor.getString(cursor.getColumnIndex(MediaStore.Ima//ges.Media.DATA));
}
cursor.close();
}
return path;
}
private void displayImage(Str/ing imagePath){
if(imagePath!=null){
Bitmap bitmap= BitmapFactory.decodeFile(imagePath);
image.setImageBitmap(bitmap);
Toast.makeText(My_info.this,"获取图片成功",Toast.LENGTH_SHORT).show();
savePac(bitmap);
}else {
Toast.makeText(My_info.this,"获取图片失败",Toast.LENGTH_SHORT).show();
}
}
//以上获取图片的绝对路径再获取bitmap实例过程来自《第一行代码 第2版》P299//
//
//
//
private void savePac(Bitmap bitmap){//保存图片
String TargetPath=My_info.this.getFilesDir().toString()+File.separator+"imagic";//getFilesDir()方法用于获取/data/data//files目录
File file=new File(TargetPath,"pac.jpg");
file.delete();
if(!file.exists()){
file.getParentFile().mkdirs();
}
try{
FileOutputStream fileOutputStrea=new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG,80,fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
}catch (Exception e){
Log.d("cnm", e.toString());
}
}
private Bitmap readPac(){//读取图片
String savePath=My_info.this.getFilesDir().toString()+File.separator+"imagic"+File.separator+"pac.jpg";
Bitmap bitmap = null;
try{
bitmap = BitmapFactory.decodeFile(savePath);
} catch (Exception e) {}
return bitmap;
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【程序源代码】基于NetCore2.2/3.1功能强大的Cms建站系统
- Linux如何屏蔽国外IP-宝塔如何屏蔽国外IP-appnode如何屏蔽国外IP
- Spring Boot Actuator H2 RCE复现-解决篇
- Spring Boot Actuator H2 RCE复现
- 【JAVA基础&高级】 数组篇
- 回文对
- 初探线程池
- 【译】代码中如何写出更有意义的命名
- nodejs源码分析之线程
- Java String Krains 2020-08-05
- 垃圾回收相关概念 Krains 2020-08-06
- 算法—判断字符串是否为IP地址
- 基于SpringBoot的Web前后端分离开发
- 【赵渝强老师】Docker的日志
- 超全递归技巧整理,这次一起拿下递归