如何显示大约180度旋转的Android UI元素

时间:2010-10-05 19:25:57

标签: java android user-interface

我想在android xml布局文件中显示一些UI元素。 我尝试制作一个应用程序,其中两个玩家可以坐在移动设备的每一端,并相互对战。

因此需要显示一些180度旋转的按钮。

这可能吗?我尝试了android:gravity,但这不起作用。

谢谢你的帮助, 马丁

4 个答案:

答案 0 :(得分:5)

我建议您查看this thread,其中讨论了类似的问题。即使问题是关于TextView组件,Button也扩展了TextView,因此将它调整为按钮应该是微不足道的。该问题的OP最终确定了以下onDraw()方法:

@Override
public void onDraw(Canvas canvas) {
    //This saves off the matrix that the canvas applies to draws, so it can be restored later. 
    canvas.save(); 

    //now we change the matrix
    //We need to rotate around the center of our text
    //Otherwise it rotates around the origin, and that's bad. 
    float py = this.getHeight()/2.0f;
    float px = this.getWidth()/2.0f;
    canvas.rotate(180, px, py); 

    //draw the text with the matrix applied. 
    super.onDraw(canvas); 

    //restore the old matrix. 
    canvas.restore(); 
}

我还会说我写了一个实现了这个onDraw()方法的类,它运行得很好。

答案 1 :(得分:0)

  

因此需要显示一些180度旋转的按钮。

任何现有的Android小部件都不支持此功能,抱歉。

答案 2 :(得分:0)

您可以做的是扩展Button视图并覆盖onDraw()方法 这将为您提供一个画布,然后您可以旋转它,然后调用super.onDraw()让系统在旋转后绘制按钮。

答案 3 :(得分:0)

您也可以使用此示例。这样做比较好,因为你不需要按Y移动你的物品。

canvas.save();

canvas.scale(1f, -1f, super.getWidth() * 0.5f,
    super.getHeight() * 0.5f);

canvas.drawBitmap(arrow,
    rect.centerX() - (arrow.getWidth() * 0.5F), rect.bottom,
    null);

canvas.restore();