4

我正在创建一个动态按钮来从 android 捕获照片。动态按钮位于与主要活动不同的类中。我的Can't resolve错误startActivityForResult我的代码

我会很感激任何帮助。谢谢你。

4

1 回答 1

3

试试这个方法,希望这能帮助你解决你的问题。

请记住,自定义类不能仅覆盖 onActivityResult() 活动扩展类覆盖 onActivityResult() 因此您必须在 Activity 中覆盖 onActivityResult() 并回调您的自定义类,如下所示

public class MainActivity extends Activity {

    private JsonGuiImageView jsonGuiImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        jsonGuiImageView = new JsonGuiImageView(this);
        setContentView(jsonGuiImageView);
    }

    @Override
    protected void  onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == jsonGuiImageView.CAMERA_REQUEST && resultCode == Activity.RESULT_OK){
            jsonGuiImageView.setPhoto();
        }
    }
}

public class JsonGuiImageView extends LinearLayout {
    private ImageView imageView;
    private ImageButton button;
    private Intent cameraIntent;
    private Bitmap photo;
    private Context context;
    public static int CAMERA_REQUEST = 1777;
    private String imagePath;

    public JsonGuiImageView(Context context){
        super(context);
        this.context = context;
        this.setOrientation(VERTICAL);
        this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        this.setGravity(Gravity.CENTER);
        button = new ImageButton(this.context);
        button.setLayoutParams(new ViewGroup.LayoutParams(60, 60));
        button.setImageResource(R.drawable.ic_launcher);
        button.setMaxHeight(60);
        button.setMinimumHeight(60);
        button.setMaxWidth(60);
        button.setMinimumWidth(60);
        button.setOnClickListener(AddImage);
        this.addView(button);
    }

    public JsonGuiImageView(Context context, AttributeSet attributeSet){
        super(context, attributeSet);
    }

    OnClickListener AddImage = new OnClickListener() {
        @Override
        public void onClick(View view) {
            File file = new File(Environment.getExternalStorageDirectory() + File.separator + "image.jpg");
            imagePath = file.getAbsolutePath();
            cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(file));
            if (cameraIntent.resolveActivity(((Activity)context).getPackageManager()) != null) {
                ((Activity)context).startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        }
    };

    public void setPhoto(){
        photo = decodeSampledBitmapFromFile(imagePath, 480, 640);
        imageView = new ImageView(getContext());
        imageView.setMaxHeight(60);
        imageView.setMinimumHeight(60);
        imageView.setMaxWidth(60);
        imageView.setMinimumWidth(60);
        imageView.setImageBitmap(photo);
        this.addView(imageView);
    }

    public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight)
    {
        Bitmap decode, rotatedBitmap = null;

        //First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, options);

        // Calculate inSampleSize, Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        options.inPreferredConfig = Bitmap.Config.RGB_565;
        int inSampleSize = 8;

        if (height > reqHeight)
        {
            inSampleSize = Math.round((float)height / (float)reqHeight);
        }
        int expectedWidth = width / inSampleSize;

        if (expectedWidth > reqWidth)
        {
            //if(Math.round((float)width / (float)reqWidth) > inSampleSize) // If bigger SampSize..
            inSampleSize = Math.round((float)width / (float)reqWidth);
        }

        options.inSampleSize = inSampleSize;

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        options.inPurgeable = true;
        options.inInputShareable = true;
        options.inTempStorage = new byte[16 * 1024];

        try{
            ExifInterface exifInterface = new ExifInterface(path);
            int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

            int rotation = 0;
            switch (orientation){
                case ExifInterface.ORIENTATION_ROTATE_90 :
                    rotation = 90;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180 :
                    rotation = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270 :
                    rotation = 270;
                    break;
                default: break;
            }

            Matrix matrix = new Matrix();
            matrix.postRotate(rotation);

            decode = BitmapFactory.decodeFile(path, options);
            rotatedBitmap = Bitmap.createBitmap(decode, 0, 0, decode.getWidth(), decode.getHeight(), matrix, true);
        } catch (IOException e){
            e.printStackTrace();
        }

        return rotatedBitmap;
    }
}
于 2014-10-13T10:23:06.017 回答