Большинство телефонных камер - это пейзаж, а это означает, что если вы сделаете фотографию на портрете, полученные снимки будут повернуты на 90 градусов. В этом случае программное обеспечение камеры должно заполнить данные Exif с ориентацией, в которой должна просматриваться фотография.
Обратите внимание, что решение ниже зависит от производителя программного обеспечения камеры / устройства заполняя данные Exif, поэтому он будет работать в большинстве случаев, но он не является 100% -ным надежным решением.
ExifInterface ei = new ExifInterface(photoPath);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
Bitmap rotatedBitmap = null;
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotatedBitmap = rotateImage(bitmap, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotatedBitmap = rotateImage(bitmap, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotatedBitmap = rotateImage(bitmap, 270);
break;
case ExifInterface.ORIENTATION_NORMAL:
default:
rotatedBitmap = bitmap;
}
Вот метод rotateImage
:
public static Bitmap rotateImage(Bitmap source, float angle) {
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
matrix, true);
}
Вы можете создать тему со всеми необходимыми свойствами, а затем использовать оператор распространения, чтобы добавить тему только к нужным кнопкам.
class App extends React.Component {
render() {
const theme = {
buttonStyle: {
backgroundColor: 'green',
},
};
...
<Button title="normal" {...theme}/>
<Button title="clear" type="clear"/>
<Button title="outline" type="outline"/>
}
}