Нехорошо о одиночных играх заключается в том, что вы не можете легко их распространять. В основном вы должны создать какой-то узор decorator или что-то подобное, если вы хотите изменить свое поведение. Кроме того, если в один прекрасный день вы хотите иметь несколько способов сделать это, это может быть довольно болезненно для изменения, в зависимости от того, как вы выставляете свой код.
Одно замечание, если вы используете синглтоны, попробуйте передать их тем, кто в них нуждается, вместо того, чтобы им напрямую обращаться к нему ... В противном случае, если вы когда-нибудь захотите использовать несколько способов сделать то, что делает одиночный, это будет довольно сложно изменить, поскольку каждый класс встраивает зависимостей, если он обращается к одиночному элементу напрямую.
Итак, в основном:
public MyConstructor(Singleton singleton) {
this.singleton = singleton;
}
, а не:
public MyConstructor() {
this.singleton = Singleton.getInstance();
}
Я считаю, что этот тип шаблона называется инъекции зависимостей и обычно считается хорошей.
Как и любой шаблон, хотя ... Подумайте об этом и подумайте, не является ли его использование в данной ситуации неуместным или нет ... Правила обычно нарушаются, и паттерны не должны применяться волей-неволей без мысли.
Используйте что-то, кроме миниатюры. Цитируя документацию для ACTION_IMAGE_CAPTURE
с добавленным добавлением:
Вызывающий может передать дополнительный EXTRA_OUTPUT, чтобы контролировать, где будет записываться это изображение. Если EXTRA_OUTPUT не присутствует, изображение небольшого размера возвращается в качестве объекта Bitmap в дополнительное поле. Это полезно для приложений, которым требуется только небольшое изображение. Если EXTRA_OUTPUT присутствует, то полноразмерное изображение будет записано в значение Uri EXTRA_OUTPUT.
blockquote>Итак, укажите
Uri
вEXTRA_OUTPUT
, где должно быть записано полное изображение камеры. Затем используйте библиотеку загрузки изображений , например Picasso , чтобы загрузить фотографию в вашImageView
.Вот пример app , который демонстрирует использование
EXTRA_OUTPUT
.
Вот как я сделал это для меня! Предполагая, что вы захватили изображение и хотите показать захваченное изображение в новом действии, вы можете следовать этому пути:
Сначала нажатием кнопки вы можете:
public void cameraFuture(View view) // <-- onClick() method of Camera Button
{
Intent intent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(),
"MyPhoto.jpg");
outPutfileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutfileUri);
startActivityForResult(intent, TAKE_PIC);
}
Затем по методу onActivityResult()
вы можете сделать так:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TAKE_PIC && resultCode==RESULT_OK){
Toast.makeText(this, outPutfileUri.toString(),Toast.LENGTH_LONG).show();
Intent bitIntent = new Intent(this, CameraTake.class);
bitIntent.putExtra("imageUri", outPutfileUri);
startActivity(bitIntent);
finish();
}
}
И в следующем действии вы можете получить файл следующим образом:
Intent receiveIntent = getIntent();
uri = receiveIntent.getParcelableExtra("imageUri");
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if(extras == null) {
receiveImg= null;
} else {
receiveImg= extras.getString("PASSER");
}
} else {
receiveImg= (String) savedInstanceState.getSerializable("PASSER");
}
File imgFile = new File(Environment.getExternalStorageDirectory(),"MyPhoto.jpg");
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView myImage = (ImageView) findViewById(R.id.camOut);
myImage.setImageBitmap(myBitmap);
}
Надеюсь, поможет! Счастливое кодирование:)
BitmapFactory.Options#inSampleSize
и все это сами, вас обязательно приглашают. Я рекомендую использовать библиотеку загрузки изображений. – CommonsWare 19 March 2016 в 13:01