围绕ImageView中心旋转图片视图。

4
我想创建一个模拟时钟,但有一个问题。我使用了3个ImageView作为秒、分和时的指针。现在我想让它们各自围绕中心旋转,但我不知道该怎么做。如何通过给出角度围绕中心旋转ImageView?

你真的需要为每个元素都使用一个ImageView吗? - IAM
3个回答

7
假设你的目标API为11,最简单的方法是:
view.setPivotX(view.getWidth() / 2);
view.setPivotY(view.getHeight() / 2);

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

0
下面是旋转文本视图的代码。它适用于API 8及以上版本。 它只是一个自定义的文本视图,你需要创建它的对象。并且需要设置旋转角度(如果需要还可以设置平移)。 public class VerticalTextView extends ImageView{ final boolean 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);

        }
}

-1

View类有一个.setRotation()方法,非常适合这个任务。只需传递旋转的角度,它将默认围绕中心旋转。

编辑:

要在API级别低于11的情况下旋转图像,请参见this帖子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接