2012-04-22 163 views
2

我想知道如何用android中的onTouch()事件順時針和逆時針旋轉圖像。以及如何通過onTouchListener找出它是順時針還是逆時針旋轉?由於如何在android中順時針和逆時針旋轉圖像?

+0

使用旋轉動畫,也有很多很好的例子在那裏...... http://developer.android.com/reference/android/view/animation/RotateAnimation.html – testingtester 2012-04-22 08:54:46

+0

謝謝,但我想知道在android中使用onTouch()事件順時針和逆時針旋轉圖像的方式 – secretlm 2012-04-22 09:01:17

回答

0

基本上你可以將你的形象自己的類,擴展視圖,並實現OnClickListener像這裏面:

public class CustomImageView extends View implements OnClickListener{ 
    ... 
} 

覆蓋您CustomImageView類中的方法的onDraw。旋轉可以通過旋轉畫布對象在onDraw內部實現。

第三,實現onClick以獲得點擊事件並根據您的需要進行輪換。

的基本佈局可能看起來像:

public class CustomImageView extends View implements OnClickListener{ 

    public void onClick (View v){ 

     // process click here 

     // invalidate after click processing in order to redraw 
     this.invalidate(); 
    } 


    protected void onDraw(Canvas canvas) { 

     // draw your image here, might be bitmap or other stuff 

     // rotate canvas now, your logic on clockwise or 
     // counterclockwise rotation goes here 
     canvas.rotate(-90.0f, centerx, centery); 

    }   

} 
+0

謝謝。實際上,我可以使用Matrix類以順時針和逆時針方向旋轉圖像。但我想用onTouch()事件順時針和逆時針旋轉圖像。 – secretlm 2012-04-22 09:23:39

+0

它與onClick結構相同。處理觸摸或點擊後重新繪製。 你的旋轉邏輯是什麼?在第一次觸摸時順時針旋轉,在第二次觸摸時逆時針旋轉等等?你可能需要一個觸摸計數器變量,這個變量可以計算出來,所以你可以在onDraw中知道圖像應該處於什麼樣的旋轉狀態。 – alex 2012-04-22 10:02:08

0

您可以嘗試使用此功能得到x和從MotionEvent對象的y值的旋轉。 在那裏,我仍然需要從給定的矢量x和矢量y的附加計算中找到方向。

private int calculateAngle(float GETX, float GETY) { 
    int direction = 1; 

    double tx = (int) GETX - object_center.x; 
    double ty = (int) GETY - object_center.y; 
    double angleInDegrees = Math.atan2(ty, tx) * 180/Math.PI; 
    int area = 0; 
    int ACTUAL_ANGLE = 270; 

    if (angleInDegrees < 0 && angleInDegrees < -90) { 
     // Need to add 
     // 270+angle degrees 
     // ================= 
     ACTUAL_ANGLE += (int) (180 + angleInDegrees) * direction; 
    } else if (angleInDegrees < 0 && angleInDegrees > -90) { 
     // Need to add 
     // 90+angle degrees 
     // ================= 
     ACTUAL_ANGLE = (int) (90 + angleInDegrees); 
    } else if (angleInDegrees > 0) 
     ACTUAL_ANGLE = 90 + (int) angleInDegrees; 
    return ACTUAL_ANGLE; 
}