1

我还是开发新手,我想知道是否有人可以在我的情况下引导我朝着正确的方向前进,因为我不确定从哪里开始:

方案:

按 acapture_button捕获图像(capture_button并且imagePreview处于同一活动中)后,我想删除capture_button并有一个ACCEPTDECLINE按钮。这些按钮应该是accept图像然后保存,或者decline图像并返回图像预览。

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

PhotoActivity.java

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;
    }

现在,我应该Intentcapture_button点击后做某种事情,还是在

PictureCallback mPicture = new PictureCallback(){ 

然后onPictureTaken参加其他活动?还是我的想法全错了?

请帮忙?

先感谢您。

4

2 回答 2

0

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

如果你这样做,你必须有你刚刚拍摄的图像的文件路径,这样你就可以允许用户在他们拒绝它时销毁它,并且在某些设备上,媒体服务可能需要几秒钟来更新图像文件路径,所以如果你去破坏它看不到的图像,你可以用力关闭。有几种方法可以做到这一点,我现在不记得了,但其中一种比其他方法快得多。

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

于 2012-05-11T08:17:04.850 回答
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 文件中创建您的接受拒绝布局并使其不可见,当您拍摄的照片将被调用时,它会更好,只是让它可见。

于 2012-05-11T07:08:02.677 回答