2014-06-09 5 views
0

Я пытался реализовать функцию, в которой пользователь может поворачивать изображение. Я думал об использовании RotateAnimation для него нравится так:RotateAnimation вращается два раза, а не один раз

rotateRight.setOnClickListener(new OnClickListener(){ 

    @Override 
    public void onClick(View v) { 

    //create a new bitmap that is rotated 90 deg 
    Matrix mat = new Matrix(); 
    mat.postRotate(90);//90 degree rotation right 
    Bitmap bMapRotate = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mat, true);//create a new bitmap with the rotated angle 
    bmp = bMapRotate; //save the rotated bitmap as the bitmap that will be uploaded 

    RotateAnimation rotateAnim = new RotateAnimation(0f, 90f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
    rotateAnim.setDuration((long)100); 
    rotateAnim.setRepeatCount(0); 
    rotateAnim.setFillAfter(true);//maintains the rotation 
    previewImage.startAnimation(rotateAnim); 

    previewImage.setImageBitmap(bmp);//set the bitmap to the rotated one (if I don't do this, the animation will always start from the initial position 


    } 

}); 

Однако, когда я делаю это изображение поворачивается два раза в первый раз нажата кнопка. Каждый раз после этого изображение вращается должным образом. Другое дело, следует отметить, что изображение сохраняется в ВМР имеет право вращения 90deg от чего ImageView (previewImage) показывает

Позвольте мне знать, если я могу дать вам, ребята, никаких дальнейших подробностей.

ответ

0

Извините, но я не очень хорошо знаю, что вы ищете, но если вы хотите повернуть что-то изображение, я предлагаю вам использовать BufferedImage вместе с AffineTransform, чтобы повернуть его.

Сначала вы вызываете ресурс в начале программы (если у вас есть изображение для вызова).

BufferedImage image = null; 
try { 
    image = ImageIO.read(MyClass.class.getResourceAsStream("scr/someimage.png")); 
} 
catch (java.io.IOException iOException) { 
    JOptionPane.showMessageDialog(null, "It was not possible to load the dot cursor."); 
    System.exit(0); 
} 

После этого, если вы хотите, чтобы повернуть, просто сделать:

BufferedImage rotatedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); 

AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI/2); 
//Must be in radian. Math.PI/2 = 90º 
BufferedImageOp buffIOP = new AffineTransformOp(rotate, null); 

Graphics2D g2 = rotatedImage.createGraphics(); 
g2.drawImage(image, buffIOP, 0, 0); 
g2.dispose(); 

Я не знаю, если это полезно для вас, но я надеюсь, что я помог в некотором роде.

+0

Просто добавляя что-то, когда вы вызываете ресурс, убедитесь, что вы его правильно назовете. В примере я дал вам cals изображение «someimage.png», если это напрямую связано с файлом src. – saclyr

+0

Я думаю, что с Android я не могу использовать AffineTrasform – Sree