簡體   English   中英

Android搜尋欄在FrameLayout中旋轉時被切除/剪切

[英]Android seekbars cut off/clipped on rotation in FrameLayout

因此,我正在嘗試制作一個窮人的交互式雷達圖或蜘蛛圖,但找不到。 我確實發現了這一點: Android版式視圖旋轉並間隔了一個圓? 並且想到了在其中旋轉搜索桿的方法,雖然有點奏效,但是搜索桿本身被某些邊界限制/切斷,我不知道它是什么。 我嘗試使用填充進行一些操作,但是它們沒有幫助。

MainActivity代碼如下所示:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Context context = getApplicationContext();

    final FrameLayout main = (FrameLayout)findViewById(R.id.main);

    int numViews = 6;
    for(int i = 0; i < numViews; i++)
    {
        // Create some quick TextViews that can be placed.
        TextView v = new TextView(this);
        SeekBar sb = new SeekBar(this);

        // Set a text and center it in each view.
        v.setText("View " + i);

        v.setGravity(Gravity.CENTER);
        v.setBackgroundColor(0xff00ffff);
        // Force the views to a nice size (150x100 px) that fits my display.
        // This should of course be done in a display size independent way.
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(400, 75);
        FrameLayout.LayoutParams lpv = new FrameLayout.LayoutParams(300, 75);

        // Place all views in the center of the layout. We'll transform them
        // away from there in the code below.
        lp.gravity = Gravity.CENTER;
        lpv.gravity = Gravity.CENTER;

        lp.bottomMargin = 150;
        lpv.bottomMargin = 150;

        // Set layout params on view.
        v.setLayoutParams(lpv);
        sb.setLayoutParams(lp);

        // Calculate the angle of the current view. Adjust by 90 degrees to
        // get View 0 at the top. We need the angle in degrees and radians.
        float angleDeg = i * 360.0f / numViews - 90.0f;
        float angleRad = (float)(angleDeg * Math.PI / 180.0f);
        // Calculate the position of the view, offset from center (300 px from
        // center). Again, this should be done in a display size independent way.
        v.setTranslationX(500 * (float)Math.cos(angleRad));
        v.setTranslationY(500 * (float)Math.sin(angleRad));

        sb.setTranslationX(250 * (float)Math.cos(angleRad));
        sb.setTranslationY(250 * (float)Math.sin(angleRad));
        // Set the rotation of the view.
        v.setRotation(angleDeg +90f);

        sb.setRotation(angleDeg );
        main.addView(sb);
        main.addView(v);
    }
}

而activity_main.xml代碼是:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Settings"
android:layout_marginBottom="150px"/>
</FrameLayout>

任何水平(如果有8個)或垂直的搜索欄看起來都不錯,但是對角線的搜索欄則無法正確顯示。 結果是這樣的: 旋轉后剪切的搜尋條

因此,視圖1和視圖2幾乎不會顯示該條,盡管拇指都可以正確移動。 視圖4和5根本不顯示它。 我應該更改什么以使其完全可見? 非常感謝你!

編輯:添加numViews = 8和15的屏幕截圖

奇怪的是,在右側只看到一些對角線,在左側看不到任何對角線。 是否也需要旋轉某種填充“框”?

在此處輸入圖片說明

在此處輸入圖片說明

android設備的問題在於屏幕分辨率和密度不同。 因此,請閱讀此“支持多屏”閱讀此網站: https : //developer.android.com/guide/practices/screens_support.html

我最近也遇到了這個問題。 但是我正在使用Android Studio中的布局編輯器構建UI,並且想知道為什么旋轉的搜索欄在預覽中看起來不錯。 所以我嘗試添加一個軟件layerType ,這似乎可行!

android:layerType="software"

或您的情況:

sb.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

希望這可以幫助。

屏幕截圖

我在2個模擬器上運行了您的代碼,看起來不錯-

在此處輸入圖片說明 在此處輸入圖片說明

您正在運行什么Android版本?

您還需要在manifast xml文件中支持不同的屏幕。打開“ AndroidManifest”,並在android versionName之后添加以下內容。

<supports-screens android:smallScreens="true"

                android:normalScreens="true"

                android:largeScreens="true"

                android:xlargeScreens="true"

                android:anyDensity="true"

                android:resizeable="true"/>

暫無
暫無

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

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