在SeekBar onProgressChanged中调整Imageview的大小

时间:2018-12-06 03:18:03

标签: android imageview seekbar

我正在尝试根据SeekBar进度调整ImageView的大小

这是我的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>

在我的片段中,我尝试了基于this answer

的这种方法
@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 :(得分:0)

给出 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" />