温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android开发中怎么实现一个图片上传功能

发布时间:2020-11-21 16:47:16 来源:亿速云 阅读:329 作者:Leah 栏目:移动开发

本篇文章给大家分享的是有关Android开发中怎么实现一个图片上传功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

代码实现:

private void showDialog() {
  View view = getLayoutInflater().inflate(R.layout.user_header_dialog, null);
  final Dialog dialog = new Dialog(this, R.style.transparentFrameWindowStyle);
  dialog.setContentView(view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
  Window window = dialog.getWindow();
  // 设置显示动画
  window.setWindowAnimations(R.style.main_menu_animstyle);
  WindowManager.LayoutParams wl = window.getAttributes();
  wl.x = 0;
  wl.y = getWindowManager().getDefaultDisplay().getHeight();
  // 以下这两句是为了保证按钮可以水平满屏
  wl.width = ViewGroup.LayoutParams.MATCH_PARENT;
  wl.height = ViewGroup.LayoutParams.WRAP_CONTENT;

  // 设置显示位置
  dialog.onWindowAttributesChanged(wl);
  // 设置点击外围解散
  dialog.setCanceledOnTouchOutside(true);
  dialog.show();

  btn_picture = (Button) window.findViewById(R.id.btn_picture);
  btn_photo = (Button) window.findViewById(R.id.btn_photo);
  btn_cancle = (Button) window.findViewById(R.id.btn_cancle);

  btn_picture.setOnClickListener(new View.OnClickListener() {// 图库
     @SuppressLint("InlinedApi")
     @Override
     public void onClick(View v) {
      Intent intent = new Intent(PhotoSelectActivity.this, AlbumActivity.class);
      startActivity(intent);
      dialog.dismiss();
     }
    });
  btn_photo.setOnClickListener(new View.OnClickListener() {// 相机
     @SuppressLint("InlinedApi")
     @Override
     public void onClick(View v) {
      photo();
      dialog.dismiss();
     }
    });
  btn_cancle.setOnClickListener(new View.OnClickListener() {// 取消
     @Override
     public void onClick(View v) {
      dialog.dismiss();
     }
    });
 }

这是弹框部分的代码,在这里需要注意的就是android6.0系统调用的时候特别是相机和访问sd权限的问题,跟android6.0以下的系统是不一样的,android6.0以下的系统在AndroidManifest.xml文件中配置就可以了,android6.0及6.0以上的话不仅需要再AndroidManifest.xml中声明还需要动态申请权限,如未申请权限就会造成程序的闪退,这里的话没有对android6.0及6.0以上做适配,关于android6.0及6.0以上系统权限的话,会在之后博文中提到;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  switch (requestCode) {
  case TAKE_PICTURE:
   if (Bimp.tempSelectBitmap.size() < 9 && resultCode == RESULT_OK) {
    File file = new File(Environment.getExternalStorageDirectory() + "/" + mImageFileName);
    mImagePath = file.getPath();
    Bitmap bitmapFromUrl = FileUtils.getBitmapFromUrl(mImagePath, 320, 480);
    String[] split = mImagePath.split("0/");
    String strUrl = "";
    if (split != null && split.length > 0) {
     strUrl = split[1];
    }
    // 重新缓存图片
    FileUtils.setPicToView(PhotoSelectActivity.this,bitmapFromUrl, strUrl);
    // 获取重新缓存图片的大小
    File iconDir = FileUtils.getIconDir(PhotoSelectActivity.this);
    String absolutePath = iconDir.getAbsolutePath();
    String picPath = absolutePath + strUrl;

    ImageItem takePhoto = new ImageItem();
    takePhoto.setBitmap(bitmapFromUrl);
    takePhoto.setImagePath(picPath);
    Bimp.tempSelectBitmap.add(takePhoto);
   }
   break;
  }
 }

这里是调用相机拍照返回时调用这里,获取到图片同时对图片进行压缩处理,同时缓存在sd中,并获取相应的路径;

/**
  * 清空图片集合
  */
 private void cleanImageList() {
  Bimp.max = 0;
  Bimp.tempSelectBitmap.clear();
 }

在点击返回或者物理物理返回键的的时候要对定义的静态变量赋值为0,同时清空图片保存时定义的静态list集合;

private void initPow() {
  View view = getLayoutInflater().inflate(R.layout.listview_popupwindows, null);

  final Dialog dialog = new Dialog(this, R.style.Dialog_Fullscreen);
  dialog.setContentView(view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
  Window window = dialog.getWindow();
  // 设置显示动画
  window.setWindowAnimations(R.style.main_menu_animstyle);
  WindowManager.LayoutParams wl = window.getAttributes();
  wl.x = 0;
  wl.y = getWindowManager().getDefaultDisplay().getHeight();

  int height = 0;
  int h=(int) (mScreenHeight / 1.6);
  int listH=AlbumActivity.contentList.size()*DensityUtil.dip2px(AlbumActivity.this,80);
  if (listH==0) {
   height=h;
  }else{
   if (listH>h) {
    height=h;
   }else{
    height=listH;
   }
  }

  // 以下这两句是为了保证按钮可以水平满屏
  wl.width = ViewGroup.LayoutParams.MATCH_PARENT;
  wl.height = height;
  // 设置显示位置
  dialog.onWindowAttributesChanged(wl);
  // 设置点击外围解散
  dialog.setCanceledOnTouchOutside(true);
  dialog.show();

  ListView listview = (ListView) window.findViewById(R.id.listview);
  ListAdapter listAdapter = new ListAdapter(AlbumActivity.this);
  listview.setAdapter(listAdapter);

  listview.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<&#63;> arg0, View arg1, int arg2, long arg3) {
    dataList = (ArrayList<ImageItem>) AlbumActivity.contentList.get(arg2).imageList;
    String folderName = AlbumActivity.contentList.get(arg2).bucketName;
    tv_all.setText("" + folderName);
    gridImageAdapter = new AlbumGridViewAdapter(AlbumActivity.this, dataList, Bimp.tempSelectBitmap);
    agridView.setAdapter(gridImageAdapter);
    dialog.dismiss();
   }
  });

 }

这里的话是在图片选择展示页面,点击所有图片时的弹框,用的是一个Dialog和listview来实现的,在这里要注意的是就是listview展示的高度问题,这里所限获取到所有listview条目高度和,同时获取到屏幕的高度,如果listview条目高度和大于屏幕高度/1.6时,就采用屏幕高度/1.6,如果listview条目高度和小于屏幕高度/1.6时,就采用listview条目高度;这样就差不多实现了,下面是运行效果:

Android开发中怎么实现一个图片上传功能

以上就是Android开发中怎么实现一个图片上传功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI