相機

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Button camera;
private Button camera1;
private Button photo;
private ImageView cameraImage;
private Button clipping;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
}

//第一步:找到所有的按鈕和圖片控件 ,按鈕設(shè)置點擊事件
private void initView() {
    //初始化控件
    camera1 = findViewById(R.id.camera);
    photo = findViewById(R.id.photo);
    clipping = findViewById(R.id.clipping);
    cameraImage = findViewById(R.id.cameraImage);
    //點擊事件
    camera1.setOnClickListener(this);
    photo.setOnClickListener(this);
    clipping.setOnClickListener(this);
    cameraImage.setOnClickListener(this);

}

//第二步:設(shè)置權(quán)限AndroidManifest.xml

//第三步:判斷點擊了那個按鈕
@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.camera:
            //第四步[1]獲取相機
            //[1] 相機的隱式回傳
            Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            //[2]添加意圖(android.intent.category.DEFAULT)
            intent1.addCategory(Intent.CATEGORY_DEFAULT);
            //[3]回傳 (注意:請求碼要和判斷的一樣)
            startActivityForResult(intent1, 0);
            break;
        case R.id.photo:
            //第六步:獲取相冊的圖片
            //[1]設(shè)置相冊的意圖(權(quán)限)
            Intent intent2 = new Intent(Intent.ACTION_PICK);
            //[2]設(shè)置顯式MIME數(shù)據(jù)類型
            intent2.setType("image/*");
            //[3]跳轉(zhuǎn)回傳
            startActivityForResult(intent2, 1);
            break;
        case R.id.clipping:
            //第七步:獲取相機圖片進(jìn)行裁剪
            //獲取相機
            // [1]設(shè)置相冊的意圖(權(quán)限)
            Intent intent3 = new Intent(Intent.ACTION_PICK);
            // [2]設(shè)置顯式MIME數(shù)據(jù)類型
            intent3.setType("image/*");
            //[3]跳轉(zhuǎn)回傳
            startActivityForResult(intent3, 2);
            break;

    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //第五步:獲取回傳值
    switch (requestCode) {
        case 0:
            //得到拍攝圖片
            Bitmap bitmap = data.getParcelableExtra("data");
            //設(shè)置給imageView(這個時候就完成了 獲取拍照圖片)
            cameraImage.setImageBitmap(bitmap);
            break;
        case 1:
            //[1]得到圖片路徑
            Uri uri1 = data.getData();
            //[2]設(shè)置圖片(相冊獲取圖片完畢)
            cameraImage.setImageURI(uri1);
            break;
        case 2:
            //獲取相測 圖片裁剪
            //[1]從返回值中直接獲取路徑
            Uri uri2 = data.getData();
            //[2]調(diào)用裁剪的方法
            Intent crp= crop(uri2);
            //[3]再次回傳
            startActivityForResult(crp, 3);
            break;
        case 3:
            //[1]獲取bitmap
            Bitmap bmp = (Bitmap) data.getExtras().get("data");
            //[2](設(shè)置圖片)
            cameraImage.setImageBitmap(bmp);
            break;
    }
}

private Intent crop(Uri uri2) {
    /*
     * 裁剪需要的東西
     * 1.圖片
     * 2.裁剪框的大小 裁剪完后圖片大?。ㄎ乙贸墒裁礃幼拥??其實就是 裁剪完的大?。?     * 3.圖片格式
     * 4.得到裁剪完的圖片
     * */
    // 裁剪圖片意圖
    Intent intent = new Intent("com.android.camera.action.CROP");
    //設(shè)置裁剪的數(shù)據(jù)源和數(shù)據(jù)類型
    intent.setDataAndType(uri2, "image/*");
    //可裁剪
    intent.putExtra("crop", "true");
    //裁剪框的比例,1:1
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    //裁剪后輸出圖片的尺寸大?。▓D片展示到imageView的大小,不要太大了,不然會出錯)
    //參數(shù)(1.輸出的大小,大?。?    intent.putExtra("outputX", 250);
    intent.putExtra("outputY", 250);
    // 圖片格式(參數(shù):輸出格式,格式)
    intent.putExtra("outputFormat", "JPEG");
    // 必須加,否則返回值中找不到返回的值
    intent.putExtra("return-data", true);// 若為true則表示返回數(shù)據(jù)(圖片)
    return intent;
}
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • LY0911閱讀 200評論 0 1
  • 總思過去匆匆 來不及將回憶都忘記 又無端多幾分情緒刻骨銘心 過去活在現(xiàn)在的夢里 未來活在過去的夢里 現(xiàn)在活在未來的...
    阿甯Linn閱讀 210評論 0 0
  • 這個題 學(xué)生寫的是B是D? 這樣吧 正確答案是B就當(dāng)D 正確答案是D就當(dāng)B
    無所事事的盲從閱讀 146評論 0 0

友情鏈接更多精彩內(nèi)容