Установите ширину и высоту от растрового изображения или ImageView до CustomView - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь получить Ширина и Высота из Bitmap и установить их в качестве параметра макета CustomView

JAVA:

 private void setBg() {
        drawView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        drawView.getLayoutParams().height = orginalBitmap.getHeight();
        drawView.getLayoutParams().width = orginalBitmap.getWidth();
        relativeLayout.addView(drawView);
    }

XML:

   <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/bottom"
        android:layout_below="@+id/clear">

        <ImageView
            android:id="@+id/fullimg"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center_horizontal|center_vertical"
            android:adjustViewBounds="true" />

        <RelativeLayout
            android:id="@+id/relative"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center_horizontal|center_vertical"
            android:gravity="center_horizontal|center_vertical"
            android:orientation="vertical" />
    </RelativeLayout>

Но приведенный выше код не работает, когда я запускаю приложение, я получаю это

enter image description here

эмоджис, например, должен остановиться прямо в углу изображения, но вместо этого он все еще появляется в двух пустых местах.

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Вот что я сделал, и это хорошо работает

  mDensity = getResources().getDisplayMetrics().density;
    actionBarHeight = (int) (110 * mDensity);
    bottombarHeight = (int) (60 * mDensity);
    viewWidth = getResources().getDisplayMetrics().widthPixels;
    viewHeight = getResources().getDisplayMetrics().heightPixels - actionBarHeight - bottombarHeight;
    viewRatio = (double) viewHeight / (double) viewWidth;
    bmRatio = (double) orginalBitmap.getHeight() / (double) orginalBitmap.getWidth();
    if (bmRatio < viewRatio) {
        bmWidth = viewWidth;
        bmHeight = (int) (((double) viewWidth) * ((double) (orginalBitmap.getHeight()) / (double) (orginalBitmap.getWidth())));
    } else {
        bmHeight = viewHeight;
        bmWidth = (int) (((double) viewHeight) * ((double) (orginalBitmap.getWidth()) / (double) (orginalBitmap.getHeight())));
    }
    final RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lparams.addRule(RelativeLayout.CENTER_IN_PARENT);
    lparams.height = bmHeight;
    lparams.width = bmWidth;
    drawView.setLayoutParams(lparams);
1 голос
/ 03 июня 2019

Используйте этот метод вместо этого, вы должны установить параметры макета таким образом, а затем добавить их в свой drawView

 private void setBg(){

    android.view.ViewGroup.LayoutParams params = drawView.getLayoutParams();
    params.width = orginalBitmap.getWidth();
    params.height = orginalBitmap.getHeight();
    drawView.setLayoutParams(params);
    relativeLayout.addView(drawView);

   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...