创建个Imageview控件: <ImageView android:id="@+id/openCamera" android:layout_width="100dp" android:layout_height="100dp" android:clickable="true" android:src="@drawable/camera" />
实例化控件:
opencamera = (ImageView) findViewById(R.id.openCamera); opencamera.setOnClickListener(this);
//打开相机 case R.id.openCamera: if (tv_coordinate.getText().toString()==""){ Toast.makeText(MainActivity.this, "请先定位再拍照!", Toast.LENGTH_LONG).show(); break; }else { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 关键:新建相机的 Intent startActivityForResult(intent, TAKE_PHOTO_CODE); // 加载相机 Activity ,TAKE_PHOTOS_CODE 是自定义的 ing 型常量,用于在 onActivityResult 处理识别返回的数据 break; }
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: //判断是否有权限 if(permissions[0] == "android.permission.ACCESS_FINE_LOCATION"){ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { } else { Toast.makeText(this, "你拒绝了权限申请,可能无法打开相机扫码哟!", Toast.LENGTH_SHORT).show(); } } if(permissions[0] == "android.permission.CAMERA") { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { goScan(); } else { Toast.makeText(this, "你拒绝了权限申请,可能无法打开相机扫码哟!", Toast.LENGTH_SHORT).show(); } } break; default: } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) { Bitmap bm = (Bitmap) data.getExtras().get("data"); //在图片上添加文字 Bitmap texttobitmap = ImageUtil.drawTextToBitmap(MainActivity.this,bm,tv_coordinate.getText().toString()); opencamera.setImageBitmap(texttobitmap); Bitmap yasuobitmap = BitmapOption.bitmapOption(texttobitmap,1); stringnumberphooto = BitmapOption.bitmapToString(yasuobitmap); } }
//在蹄片上添加文字 public class ImageUtil { //gResId:图片id,gContext系统资源, public static Bitmap drawTextToBitmap(Context gContext,Bitmap bitmap, String gText) { String text = String.valueOf(gText); Resources resources = gContext.getResources(); float scale = resources.getDisplayMetrics().density; // resource bitmaps are imutable, // so we need to convert it to mutable one bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.WHITE); paint.setTextSize((int) (5 * scale)); paint.setDither(true); paint.setFilterBitmap(true); paint.setTextAlign(gText.length() > 9 ? Paint.Align.CENTER : Paint.Align.RIGHT); Rect bounds = new Rect(); paint.getTextBounds(text, 0, text.length(), bounds); int x = (bitmap.getWidth() - bounds.width()) / 2; int y = (bitmap.getHeight() - bounds.height()) / 2; canvas.drawText(text, x * 2, y / 6, paint); return bitmap; } }
//压缩图片
public static Bitmap bitmapOption(Bitmap image, int size) { ByteArrayOutputStream out = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 85, out); float zoom = (float) Math.sqrt(size * 1024 / (float) out.toByteArray().length); Matrix matrix = new Matrix(); matrix.setScale(zoom, zoom); Bitmap result = Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), matrix, true); out.reset(); result.compress(Bitmap.CompressFormat.JPEG, 85, out); while (out.toByteArray().length > size * 1024) { System.out.println(out.toByteArray().length); matrix.setScale(0.9f, 0.9f); result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true); out.reset(); result.compress(Bitmap.CompressFormat.JPEG, 85, out); } return result; }