Estou usando o código a seguir para girar uma imagem no ImageView por um ângulo. Existe algum método mais simples e menos complexo disponível.
ImageView iv = (ImageView)findViewById(imageviewid);
TextView tv = (TextView)findViewById(txtViewsid);
Matrix mat = new Matrix();
Bitmap bMap = BitmapFactory.decodeResource(getResources(),imageid);
mat.postRotate(Integer.parseInt(degree));===>angle to be rotated
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,bMap.getWidth(),bMap.getHeight(), mat, true);
iv.setImageBitmap(bMapRotate);
Respostas:
Outra maneira simples de girar um
ImageView
:UPDATE:
Importações necessárias:
Código: (Supondo
imageView
,angle
,pivotX
epivotY
já estão definidos)Este método não requer a criação de um novo bitmap a cada vez.
fonte
ImageView
valores de:matrix.postRotate( 180f, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);
ImageView
'ssrc
atributo.getDrawable()
estava retornando nulo para mim até que percebi que havia definido o atributoImageView
's embackground
vez desrc
. facepalmmImageView.setRotation(angle)
com API> = 11fonte
ViewPropertyAnimator
, que é usada comoaView.animate().rotation(20).start()
rotationBy()
. Por exemploview.animate().rotationBy(180f).start()
,. Mas torna-se problemático se a vista for clicada sucessivamente.Se você oferece suporte à API 11 ou superior, basta usar o seguinte atributo XML:
Pode não ser exibido corretamente na visualização xml do Android Studio, mas funciona conforme o esperado.
fonte
background
para ver o efeito.Existem duas maneiras de fazer isso:
1 Usando
Matrix
para criar um novo bitmap:2 utilização
RotateAnimation
noView
que deseja girar, e certifique-se o conjunto de animação parafillAfter=true
,duration=0
efromDegrees=toDgrees
e Inflate the Animation no código:
fonte
Sei que isso é insanamente tarde, mas foi útil para mim, pois pode ajudar os outros.
A partir da API 11, você pode definir a rotação absoluta de um ImageView programaticamente usando o comando
imageView.setRotation(angleInDegrees);
métodoPor absoluto, quero dizer que você pode chamar repetidamente essa função sem ter que acompanhar a rotação atual. Ou seja, se eu girar passando
15F
para osetRotation()
método e depois ligarsetRotation()
novamente com30F
, a rotação da imagem será 30 graus, não 45 graus.Nota: Isso realmente funciona para qualquer subclasse do objeto View , não apenas para o ImageView.
fonte
Esta é a minha implementação do RotatableImageView . O uso é muito fácil: basta copiar attrs.xml e RotatableImageView.java no seu projeto e adicionar RotatableImageView ao seu layout. Defina o ângulo de rotação desejado usando o exemplo: parâmetro angle .
Se você tiver algum problema com a exibição da imagem, tente alterar o código no método RotatableImageView.onDraw () ou use o método draw ().
fonte
Também pode ser feito desta maneira: -
veio daqui.
fonte
Além disso, se você quiser girar um ImageView em 180 graus na vertical ou na horizontal, poderá usar
scaleY
ouscaleX
properties e defini-los como-1f
. Aqui está um exemplo do Kotlin:1f
O valor é usado para retornar um ImageView ao seu estado normal:fonte
Eu tenho uma solução para isso. Na verdade, é uma solução para um problema que surge após a rotação (a imagem retangular não se encaixa no ImagView), mas também cobre o seu problema. Embora essa solução tenha Animação para melhor ou para pior
Não é possível obter os parâmetros do imageView na inicialização da atividade. Para isso, consulte esta solução OU defina as dimensões em onClick of a Button like this
E o código a ser executado quando queremos rotacionar o ImageView
Esta solução é suficiente para o Problema acima. Embora ela reduza o imageView, mesmo que não seja necessário (quando a altura for menor que Largura). Se isso lhe incomoda, você pode adicionar outro operador ternário em scaleX / scaleY.
fonte
Eu acho que o melhor método :)
fonte
Gire uma imagem no android com atraso:
fonte
tente isso em uma exibição personalizada
fonte
aqui está uma boa solução para colocar um drawable girado para uma imagem
uso:
outra alternativa:
Além disso, se você deseja girar o bitmap, mas com medo do OOM, pode usar uma solução NDK que criei aqui
fonte
Se você deseja girar a vista apenas visualmente, pode usar:
fonte
Para Kotlin,
Isso girará o imageView em vez de girar a imagem
Além disso, embora seja um método em
View
classe. Assim, você pode girar praticamente qualquer visualização usando-a.fonte
Infelizmente, acho que não existe. o
Matrix
classe é responsável por todas as manipulações de imagem, seja girando, diminuindo / aumentando, enviesando etc.http://developer.android.com/reference/android/graphics/Matrix.html
Peço desculpas, mas não consigo pensar em uma alternativa. Talvez outra pessoa possa, mas nas vezes em que tive que manipular uma imagem usei uma Matrix.
Boa sorte!
fonte
Outra solução possível é criar sua própria exibição de imagem personalizada (por exemplo
RotateableImageView extends ImageView
) ... e substituir o onDraw () para girar a tela / bitmaps antes de voltar para a tela. Não se esqueça de restaurar a tela novamente.Mas se você for rotacionar apenas uma única instância da visualização de imagem, sua solução deve ser boa o suficiente.
fonte
sem matriz e animado:
fonte
basta escrever isso em seu onactivityResult
fonte
Experimente este código 100% funcionando;
No botão girar, clique em escrever este código:
fonte
Em vez de converter a imagem em bitmap e girá-la, tente girar a exibição direta da imagem, como abaixo do código.
fonte
Siga a resposta abaixo para rotação contínua de uma visualização de imagem
Se clicar no botão girar
fonte
se você quiser girar uma imagem em 180 graus, coloque esses dois valores na tag imageview: -
Explicação: - scaleX = 1 e scaleY = 1 representam seu estado normal, mas se colocarmos -1 na propriedade scaleX / scaleY, ele será girado 180 graus
fonte
Como usar?
fonte
Você pode simplesmente usar rotação atributo de do ImageView
Abaixo está o atributo do ImageView com detalhes da fonte do Android
fonte