实现仿微信拍照和选取相片(转自网络)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1,首先MainActivity

package com.example.picpopupwindow;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class MainActivity extends Activity {
 private ImageView photo;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  photo = (ImageView) this.findViewById(R.id.text);
  // 把文字控件添加监听,点击弹出自定义窗口
  photo.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    //使用startActivityForResult启动SelectPicPopupWindow当返回到此Activity的时候就会调用onActivityResult函数
    startActivityForResult(new Intent(MainActivity.this,
      SelectPicPopupWindow.class), 1);
   }
  });
 }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  switch (resultCode) {
  case 1:
   if (data != null) {
    //取得返回的Uri,基本上选择照片的时候返回的是以Uri形式,但是在拍照中有得机子呢Uri是空的,所以要特别注意
    Uri mImageCaptureUri = data.getData();
    //返回的Uri不为空时,那么图片信息数据都会在Uri中获得。如果为空,那么我们就进行下面的方式获取
    if (mImageCaptureUri != null) {
     Bitmap image;
     try {
      //这个方法是根据Uri获取Bitmap图片的静态方法
      image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mImageCaptureUri);
      if (image != null) {
       photo.setImageBitmap(image);
      }
     } catch (Exception e) {
      e.printStackTrace();
     }
    } else {
     Bundle extras = data.getExtras();
     if (extras != null) {
      //这里是有些拍照后的图片是直接存放到Bundle中的所以我们可以从这里面获取Bitmap图片
      Bitmap image = extras.getParcelable("data");
      if (image != null) {
       photo.setImageBitmap(image);
      }
     }
    }
   }
   break;
  default:
   break;
  }
 }
}

2,选择相片得activity。

package com.example.picpopupwindow;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class SelectPicPopupWindow extends Activity implements OnClickListener {
 private Button btn_take_photo, btn_pick_photo, btn_cancel;
 private LinearLayout layout;
 private Intent intent;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.alert_dialog);
  intent = getIntent();
  btn_take_photo = (Button) this.findViewById(R.id.btn_take_photo);
  btn_pick_photo = (Button) this.findViewById(R.id.btn_pick_photo);
  btn_cancel = (Button) this.findViewById(R.id.btn_cancel);
  layout = (LinearLayout) findViewById(R.id.pop_layout);
  // 添加选择窗口范围监听可以优先获取触点,即不再执行onTouchEvent()函数,点击其他地方时执行onTouchEvent()函数销毁Activity
  layout.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(), "提示:点击窗口外部关闭窗口!",
      Toast.LENGTH_SHORT).show();
   }
  });
  // 添加按钮监听
  btn_cancel.setOnClickListener(this);
  btn_pick_photo.setOnClickListener(this);
  btn_take_photo.setOnClickListener(this);
 }
 // 实现onTouchEvent触屏函数但点击屏幕时销毁本Activity
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  finish();
  return true;
 }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (resultCode != RESULT_OK) {
   return;
  }
  //选择完或者拍完照后会在这里处理,然后我们继续使用setResult返回Intent以便可以传递数据和调用
  if (data.getExtras() != null)
   intent.putExtras(data.getExtras());
  if (data.getData()!= null)
   intent.setData(data.getData());
  setResult(1, intent);
  finish();
 }
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.btn_take_photo:
   try {
    //拍照我们用Action为MediaStore.ACTION_IMAGE_CAPTURE,
    //有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, 1);
   } catch (Exception e) {
    e.printStackTrace();
   }
   break;
  case R.id.btn_pick_photo:
   try {
    //选择照片的时候也一样,我们用Action为Intent.ACTION_GET_CONTENT,
    //有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent, 2);
   } catch (ActivityNotFoundException e) {
   }
   break;
  case R.id.btn_cancel:
   finish();
   break;
  default:
   break;
  }
 }
}
实现仿微信拍照和选取相片(转自网络)_第1张图片

转载于:https://my.oschina.net/u/2480757/blog/514252

你可能感兴趣的:(实现仿微信拍照和选取相片(转自网络))