在不调整大小的情况下正确显示超出屏幕范围的旋转视图

时间:2018-09-04 07:21:37

标签: java android android-layout

现在,我正在尝试在自定义视图之上添加可能超出屏幕范围的视图来解决问题。该自定义视图以不同的角度绘制了不同的矩形。为了以后使用,应该可以选择矩形以用于以后的拖放操作,在这些操作中我不想不断重绘整个自定义视图。

因此,在每个绘制的矩形上方,我放置了一个具有相同尺寸和旋转度的按钮。

但是由于某些原因,android似乎在到达屏幕末端时会自动调整视图的大小:

我的期望(即使只有一半可见,按钮也会覆盖所有内容):

Image: button covers everything even if only half visible

实际行为(按钮缩小):

Image: button gets shrunk

当我要添加的视图未旋转时,这本身并不是一个大问题。

如果旋转视图,但是围绕该中心点的旋转会导致各种问题,因为该视图现在更小且位于其他位置:

我的期望(按钮正好围绕对象的中心旋转):

Image: button is rotated exactly around the center point of the object

我得到的是按钮变小,因此其中心点移动了:

button becomes smaller and therefore its center point moves

我阅读了其他问题,认为View.setClipChildren(false)和View.setClipPadding(false)应该有所帮助。但是它所做的基本上只是弄乱了我的视图层次结构,因为我有点想进行剪切,而不是自动调整大小。最重要的是,它不能解决我遇到的问题。

你们中的任何一个有一个想法我该如何解决吗?

我试图在IOS和JavaFX上做同样的事情,它们都按预期工作。

由于我试图以编程方式解决整个问题,因此我创建了一些测试代码,将按钮的中心点放在屏幕边缘并将其旋转45度:因此,您应该只能看到按钮的一半。但是该按钮显得较小,并且在屏幕右侧完全可见。当然,由于中心点不同,它也不在我期望的位置上。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Context context = getApplicationContext();

        RelativeLayout relativeLayout = new RelativeLayout(context);

        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

        int height = displaymetrics.heightPixels;
        int width = displaymetrics.widthPixels;

        Button button = new Button(context);
        button.setText("DO STUFF"); 
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(800, 80);
        params.leftMargin = width - 400; 
        params.topMargin = height / 2;

        button.setLayoutParams(params);
        button.setRotation(45);
        button.setBackgroundColor(Color.RED);

        relativeLayout.addView(button);

        setContentView(relativeLayout);
    }
}

1 个答案:

答案 0 :(得分:0)

我偶然发现了解决方案。

这似乎是RelativeLayout的一种特殊行为。我没有找到任何能解释它的信息,但是我将其替换为具有两个积极影响的FrameLayout。

  1. 它能按我预期的那样工作
  2. 由于将多个相对布局彼此嵌套在一起,因此性能得到了提高。