簡體   English   中英

在不調整大小的情況下正確顯示超出屏幕范圍的旋轉視圖

[英]Display rotated views that exceed screen bounds correctly without resizing

現在,我正在嘗試在自定義視圖之上添加視圖(可能會超出屏幕范圍)來解決問題。 該自定義視圖以不同的角度繪制了不同的矩形。 為了以后使用,應該可以選擇矩形以用於以后的拖放操作,在這些情況下,我不想不斷重繪整個自定義視圖。

因此,在每個繪制的矩形上方放置一個具有相同尺寸和旋轉度的按鈕。

但是由於某種原因,android似乎在到達屏幕末端時會自動調整視圖大小:

我的期望(即使只有一半可見,按鈕也會覆蓋所有內容):

圖片:即使只有一半可見,按鈕也可以覆蓋所有內容

實際行為(按鈕縮小):

圖像:按鈕縮小

當我要添加的視圖未旋轉時,這本身並不是一個大問題。

但是,如果旋轉視圖,則圍繞該中心點的旋轉會導致各種問題,因為該視圖現在更小且位於其他位置:

我的期望(按鈕完全圍繞對象的中心點旋轉):

圖片:按鈕正好圍繞對象的中心點旋轉

我得到的是按鈕變小,因此其中心點移動:

按鈕變小,因此其中心點移動

我閱讀了其他問題,認為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);
    }
}

我是偶然發現解決方案的。

這似乎是RelativeLayout的一種特殊行為。 我沒有找到任何能解釋它的內容,但是我將其替換為具有兩個積極影響的FrameLayout。

  1. 它按我預期的那樣工作
  2. 由於我還將多個相對布局相互嵌套,因此性能得到了提高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM