Как сделать изображение из inte rnet отзывчивым на макете android? - PullRequest
1 голос
/ 28 мая 2020

У меня есть Imageview на моем макете, который я заполняю файлом .jpg, который загружаю из Интернета. дело в том, что я пытаюсь сделать контейнер изображения зависимым от размера экрана, поскольку в больших телефонах изображение выглядит маленьким.

    public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
    }

    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String imageUrl="https:url";

        new DownloadImageTask((ImageView) findViewById(R.id.imvAd))
                .execute(imageUrl);
    }
    }

Я не хочу указывать фиксированные значения.

Любая помощь или предложения о том, что искать, были бы замечательными

Это макет

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".startActivities.LoginActivity"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="5"
        android:background="@color/white"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/imvLogo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@mipmap/logo"
                tools:ignore="ContentDescription" />

            <LinearLayout
                android:id="@+id/lytProgressBarLogin"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone">

                <ProgressBar
                    android:id="@+id/pgbLogin"
                    style="?android:attr/progressBarStyle"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:orientation="vertical"
                android:padding="10dp">

                <TextView
                    android:id="@+id/txtwelcome"
                    style="@style/styleTextview1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:text="@string/welcome" />

                <EditText
                    android:id="@+id/edtPwdworker"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:hint="@string/password"
                    android:inputType="numberPassword" />

                <Button
                    android:id="@+id/btnLogin"
                    style="@style/styleButtonConsult"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="20dp"
                    android:text="@string/login" />
            </LinearLayout>

            <TextView
                android:id="@+id/txtInfoRoute"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="10dp"
                android:layout_weight="90"
                android:gravity="center" />

            <TextView
                android:id="@+id/txtPinDeviceLogin"
                style="@style/styleTextviewsubTitlebold"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:gravity="center"
                android:text="@string/pinDevice" />

            <ImageView
                android:id="@+id/imvAd"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="10dp"
                tools:ignore="ContentDescription" />
        </LinearLayout>

    </ScrollView>

    <TextView
        android:id="@+id/txtVersionLogin"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="95"
        android:gravity="center" />

</LinearLayout>

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

вы можете использовать glide

использовать Gradle:

repositories {
  mavenCentral()
  google()
}

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.11.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}

можно изменить размер изображения java:

Glide
.with(context)
.load(path)
.apply(new RequestOptions().override(600, 200))
.into(imageViewResizeCenterCrop);

xml :

  <LinearLayout
    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"
    tools:context=".MainActivity"
    android:weightSum="10"
    android:orientation="vertical">
    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="6"
        android:weightSum="10"
        android:orientation="horizontal">

        <View
            android:layout_width="0dp"
            android:layout_height="10dp"
            android:layout_weight="2"/>
        <ImageView
            android:id="@+id/imvAd"
            android:layout_width="0dp"
            android:layout_weight="6"
            android:layout_height="match_parent"
            android:padding="10dp" />

        <View
            android:layout_width="0dp"
            android:layout_height="10dp"
            android:layout_weight="2"/>
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"/>

</LinearLayout>
0 голосов
/ 28 мая 2020

Если ваш ImageView исправлен, вы можете масштабировать изображение, установив ScaleType на CENTER_CROP или другие соответствующие типы масштабирования, чтобы масштаб изображения был таким же, как у ImageView.

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleType="centerCrop" />

Также не Не используйте wrap_content, вместо этого вы можете использовать match_parent для соответствия макету. или используйте 0dpConstraintLayout) и ограничьте ImageView между двумя другими представлениями.

, но если вы хотите, чтобы размер вашего ImageView изменялся по отношению к размеру экрана, вы можете использовать Constraintlayout в качестве родительского и используйте layout_constraintDimensionRatio вот так.

<androidx.constraintlayout.widget.ConstraintLayout>
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintDimensionRatio="1:1" />
</androidx.constraintlayout.widget.ConstraintLayout>

Кроме того, я предлагаю использовать библиотеку загрузчика изображений, такую ​​как Glide . Это более эффективно, чем загрузка изображения самостоятельно, а также вы можете установить тип масштаба прямо оттуда.

...