Изменить размер изображения в SeekBar на ProgressChanged - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь изменить размер ImageView на основе прогресса SeekBar

Вот мой макет xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView_pizzaSize_icon"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:contentDescription="Pizza"
        android:src="@drawable/pizza" />

    <SeekBar
        android:id="@+id/seekBar_pizzaSize"
        style="@style/Widget.AppCompat.SeekBar.Discrete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="32dp"
        android:layout_alignParentBottom="true"
        android:progress="0" />

    <TextView
        android:id="@+id/textView_pizzaSize_description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        tools:text="PIZZA SIZE" />
</RelativeLayout>

Внутри моего фрагмента я попробовал этот подход на основе этого ответа

@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
    int diff = i - previousProcess;
    scaleImage(mImageView, diff);
    previousProcess = i;
}

public void scaleImage(ImageView img, int scale) {
    Bitmap bitmap = ((BitmapDrawable) img.getDrawable()).getBitmap();
    float width = bitmap.getWidth();
    float height = bitmap.getHeight();
    width += scale * widthScaleRatio;
    height += scale * heightScaleRatio;

    bitmap = Bitmap.createScaledBitmap(bitmap, (int) width, (int) height,
            true);
    img.setImageBitmap(bitmap);
}

Но мой ImageView не изменяет размер, он сохраняет тот же размер оригинала, только немного меняя при изменении SeekBar.

Моя идея - открыть фрагмент с помощьюImageView занимает только 50% ширины, а SeekBar находится в позиции 0. Количество позиций, доступных для подбора, будет варьироваться.Когда SeekBar достигнет последнего индекса, ImageView будет занимать около 95% ширины, оставляя место для полей.
Я знаю, что в этой идее есть более сложные операции, чем в моем вопросе об изменении размера ImageView, но я представляю общую картину того, чтоЯ хочу добиться, может быть, помочь вам привести меня на правильный путь.Это будет частью действия, когда пользователь будет монтировать пиццу, сначала выбирая размер пиццы, и чем больше размер, тем больше ImageView.

1 Ответ

0 голосов
/ 07 декабря 2018

Дайте ImageView высоту и ширину wrap_content и попробуйте

<ImageView
    android:id="@+id/imageView_pizzaSize_icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:src="@drawable/Pizza" />
...