2013-06-12 124 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); 

     } 
}