Android:在图片捕获后添加新按钮以接受/拒绝图像

时间:2012-05-11 06:33:50

标签: java android android-intent sdk android-camera

我还不熟悉开发,我想知道是否有人能引导我走向正确的方向,因为我不知道从哪里开始:

计划:

按下capture_button以捕获图片(capture_buttonimagePreview处于同一活动中)后,我想删除capture_button并拥有{{1 }或ACCEPT按钮。这些按钮应该是DECLINE图像,然后保存,或accept图像并返回到imagePreview。

现在,我不确定在按下decline时是否应该创建另一个活动,

PhotoActivity.java

capture_button

现在,我应该在public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.photo); mCamera = getCameraInstant(); mCameraPreview = new CameraPreview(this, mCamera); FrameLayout preview = (FrameLayout) findViewById(id.camera_preview); preview.addView(mCameraPreview); // Add a listener to the Capture button Button captureButton = (Button) findViewById(id.button_capture); captureButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // get an image from the camera mCamera.takePicture(null, null, mPicture); } } ); } PictureCallback mPicture = new PictureCallback(){ @Override public void onPictureTaken(byte[] data, Camera camera) { Log.e("photo","pictureCallback"); // TODO Auto-generated method stub File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); if(pictureFile==null){ return; } try { FileOutputStream fos = new FileOutputStream(pictureFile); fos.write(data); fos.close(); } catch (FileNotFoundException e) { Log.d(TAG, "File not found: " + e.getMessage()); } catch (IOException e){ Log.d(TAG, "Error accessing file: " + e.getMessage()); } } }; private File getOutputMediaFile(int type){ File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "Photo"); if (!mediaStorageDir.exists()){ if (! mediaStorageDir.mkdirs()){ Log.d("Photo", "failed to create directory"); return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); File mediaFile; mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_"+ timeStamp + ".jpg"); return mediaFile; } 点击后或

之后做某种Intent
capture_button

然后在其他活动中拥有PictureCallback mPicture = new PictureCallback(){ ?或者我的想法都错了?

请帮帮忙?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

试试这会对你有所帮助

       final LinearLayout accept_deciline  = new LinearLayout(getApplicationContext());
       LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
       accept_deciline.setOrientation(LinearLayout.HORIZONTAL);
       Button accept = new Button(getApplicationContext());
       accept.setText("Accept");
       Button decline = new Button(getApplicationContext());
       decline.setText("Decline");
       accept_deciline.addView(accept);
       accept_deciline.addView(decline);
       addContentView(accept_deciline, lp);
       accept_deciline.setVisibility(View.INVISIBLE);

       accept.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               // SAVE YOUR IMAGE.
           }
       });

       decline.setOnClickListener(new View.OnClickListener() {

           @Override
            public void onClick(View v) {
            }
       });
       //KEEP THIS LINE IN YOUR PICTURE CALLBACK NOT HERE.
       accept_deciline.setVisibility(View.VISIBLE);

如果您将在XML文件中创建您的接受拒绝布局,并且在您拍摄的照片将被视为可见时,它将更加可见。

答案 1 :(得分:0)

我做的一件事是使用在拍照后弹出的警报对话框。您可以设置onclick侦听器,以根据您要发生的事情(接受或拒绝)执行您需要的任何操作。这样可以避免对布局进行任何更改并添加按钮并将其删除。您可以通过在onPictureTaken方法的末尾放置alertdialog.show()方法来启动alertdialog。

如果你这样做,你必须拥有你刚拍摄的图像的文件路径,这样你就可以让用户在它拒绝的情况下销毁它,而在某些设备上它可能需要mediaservice几秒钟来更新图像文件路径所以,如果你去摧毁一个图像,它不会看到你可以关闭一个力量。有几种方法可以做到这一点,我现在无法记住,但其中一种比其他方式更快。

除非您计划启动其他类型的操作,活动,服务等,否则您不需要意图。例如,如果您想将图像的文件路径传递给另一个可以对其进行更改的活动,上传它或者您有什么,您可以将图像的文件路径添加到这样的意图:      intent.putExtra( “的ImagePath”,的ImagePath);