2013-06-12 160 views
3

我想創建一個模擬時鐘,我有一個問題。我使用3個imageview秒,分和小時手。現在我想讓他們每個人圍繞中心旋轉,但我不能。我如何通過給中心的角度來旋轉圖像視圖?圍繞它的中心旋轉imageview

+0

你真的需要每個元素的imageview? – IAM

回答

4

假設你的目標API 11,最簡單的方法是:

view.setPivotX(view.getWidth()/2); 
view.setPivotY(view.getHeight()/2); 

float rotation = //some value between 0f and 360f 
view.setRotation(rotation); 
0

View類有一個.setRoatation()方法,將很好地工作。只需傳遞一定的度數即可旋轉,默認情況下會圍繞中心旋轉。

編輯:

對於低於11旋轉在API級別圖像,請參閱this後。

+0

但我需要API 8。這種方法不適合我 – Fcoder

0

下面是旋轉textview的代碼。它也適用於API 8。 它只是您需要創建它的對象的自定義文本視圖。並且需要設置旋轉角度(如果需要的話也需要翻譯)。

public class VerticalTextView extends ImageView {0}最終布爾值topDown = true;

float iRotateAngel, iSetX, iSetY; 

    int iIndex; 

    Context context; 

    public int getiIndex() 
     { 
      return iIndex; 
     } 

    public void setiIndex(int iIndex) 
     { 
      this.iIndex = iIndex; 
     } 

    public float getiRotateAngel() 
     { 
      return iRotateAngel; 
     } 

    public void setiRotateAngel(float iRotateAngel) 
     { 
      this.iRotateAngel = iRotateAngel; 
     } 

    public float getiSetX() 
     { 
      return iSetX; 
     } 

    public void setiSetX(float iSetX) 
     { 
      this.iSetX = iSetX; 
     } 

    public float getiSetY() 
     { 
      return iSetY; 
     } 

    public void setiSetY(float iSetY) 
     { 
      this.iSetY = iSetY; 
     } 

    public boolean isTopDown() 
     { 
      return topDown; 
     } 



    public VerticalTextView(Context context) 
     { 
      super(context); 
      this.context = context; 
     } 

    public VerticalTextView(Context context, AttributeSet attrs) 
     { 
      super(context, attrs); 
     } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
     { 
      super.onMeasure(heightMeasureSpec, widthMeasureSpec); 
      setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); 
     } 

    @Override 
    protected boolean setFrame(int l, int t, int r, int b) 
     { 
      return super.setFrame(l+32, t+12, l + (b - t)+32, t + (r - l)+12); 
     } 
    @Override 
    public void draw(Canvas canvas) 
     { 
      if (topDown) 
       { 

        canvas.translate(this.iSetX, this.iSetY); 
        canvas.rotate(this.iRotateAngel); 
       } 
      else 
       { 

        canvas.translate(this.iSetX, this.iSetY); 
        canvas.rotate(this.iRotateAngel); 
       } 
      canvas.clipRect(0,0,getWidth(), getHeight(), android.graphics.Region.Op.REPLACE); 
      super.draw(canvas); 

     } 
}