2015-02-01 11 views
8

To jest kod Java. Otrzymuję obraz z galerii obrazów. Mam jeden przycisk i jeden widok obrazu. Obraca się tylko jeden raz. Gdy ponownie klikam przycisk, obraz nie jest obracany.Jak za każdym razem obracać obraz w widoku obrazu za pomocą przycisku?

public class EditActivity extends ActionBarActivity 
{ 
private Button rotate; 
private ImageView imageView; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_edit); 
    rotate=(Button)findViewById(R.id.btn_rotate1); 
    imageView = (ImageView) findViewById(R.id.selectedImage); 
    String path = getIntent().getExtras().getString("path"); 
    final Bitmap bitmap = BitmapFactory.decodeFile(path); 
    imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    imageView.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 510, 500, 
      false)); 
    rotate.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
      {     
      imageView.setRotation(90); 


     } 
    }); 



} 
+0

możliwy duplikat [ANDROID :: Obróć obraz w widoku obrazu o kąt] (http://stackoverflow.com/questions/8981845/androidrotate-image-in-imageview-by-an-angle) – Dhina

+0

Po prostu chciałbym zwrócić uwagę, że to pytanie wymaga kolejnych rotacji, które następnie kończą pełne koło. Proponowany duplikat z kolei będzie się obracał o kwadrant i ciągle będzie go powtarzać. –

Odpowiedz

23

zmienić metodę onClick() do

@Override 
public void onClick(View v) 
{     
    imageView.setRotation(imageView.getRotation() + 90); 
} 

obwieszczenia, co docs powiedzieć

Ustawia stopni, że widok jest obracana wokół punktu obrotu. Zwiększanie wartości powoduje obrót w prawo.


Chciałbym uaktualnić moją odpowiedź, aby pokazać, jak korzystać RotateAnimation aby osiągnąć ten sam efekt w przypadku jesteś również kierowanie urządzeniach z Androidem Gingerbread (v10) lub mniej.

private int mCurrRotation = 0; // takes the place of getRotation() 

wprowadzenie pola wystąpienia śledzić stopni obrotu, jak wyżej i wykorzystanie go jako:

mCurrRotation %= 360; 
float fromRotation = mCurrRotation; 
float toRotation = mCurrRotation += 90; 

final RotateAnimation rotateAnim = new RotateAnimation(
     fromRotation, toRotation, imageview.getWidth()/2, imageView.getHeight()/2); 

rotateAnim.setDuration(1000); // Use 0 ms to rotate instantly 
rotateAnim.setFillAfter(true); // Must be true or the animation will reset 

imageView.startAnimation(rotateAnim); 

zwykle w jednym zamocowaniu puszki takie View animations poprzez XML, jak również. Ale ponieważ musisz tu podać wartości absolutnego stopnia, kolejne rotacje powtają się zamiast budować na poprzednim, aby wypełnić pełne koło. Dlatego postanowiłem pokazać, jak to zrobić w powyższym kodzie.

+0

Działa. Dziękuję. – user2095748

+0

Cieszę się, że mogę Ci pomóc. Nie zapomnij o awansie/zaakceptowaniu odpowiedzi, gdy tylko możesz :) –

+0

od API 11 ... – Darpan