¿Cómo reducir la cantidad de imágenes correctamente?

Fondo

Al crear una aplicación que tiene muchas imágenes de alta calidad, he decidido reducir la escala de las imágenes al tamaño necesario (lo que significa que si la imagen es más grande que la pantalla, la reduzco).

El problema

Me he dado cuenta de que en algunos dispositivos, si las imágenes se reducen de escala, se vuelven borrosas / pixeladas, pero en los mismos dispositivos, para el mismo tamaño de imageView de destino, si las imágenes no se reducen, se ven bien.

Lo que he intentado

Decidí seguir revisando este problema y creé una pequeña aplicación de POC que muestra el problema.

Antes de mostrarle el código, aquí hay una demostración de lo que estoy hablando:

Es un poco difícil ver la diferencia, pero puedes ver que el segundo está un poco pixelado. Esto se puede mostrar en cualquier imagen.

public class MainActivity extends Activity
  {
  @Override
  protected void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ImageView originalImageView=(ImageView)findViewById(R.id.originalImageView);
    final ImageView halvedImageView=(ImageView)findViewById(R.id.halvedImageView);
    final ImageView halvedBitmapImageView=(ImageView)findViewById(R.id.halvedBitmapImageView);
    //
    final Bitmap originalBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test);
    originalImageView.setImageBitmap(originalBitmap);
    halvedImageView.setImageBitmap(originalBitmap);
    //
    final LayoutParams layoutParams=halvedImageView.getLayoutParams();
    layoutParams.width=originalBitmap.getWidth()/2;
    layoutParams.height=originalBitmap.getHeight()/2;
    halvedImageView.setLayoutParams(layoutParams);
    //
    final Options options=new Options();
    options.inSampleSize=2;
    // options.inDither=true; //didn't help
    // options.inPreferQualityOverSpeed=true; //didn't help
    final Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test,options);
    halvedBitmapImageView.setImageBitmap(bitmap);
    }
  }

xml:

<ScrollView 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:fillViewport="true">
  <HorizontalScrollView android:layout_width="match_parent"
    android:fillViewport="true" android:layout_height="match_parent">
    <LinearLayout android:layout_width="match_parent"
      android:layout_height="match_parent" android:orientation="vertical">


      <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="original" />

      <ImageView android:layout_width="wrap_content"
        android:id="@+id/originalImageView" android:layout_height="wrap_content" />

      <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="original , imageView size is halved" />

      <ImageView android:layout_width="wrap_content"
        android:id="@+id/halvedImageView" android:layout_height="wrap_content" />

      <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="bitmap size is halved" />

      <ImageView android:layout_width="wrap_content"
        android:id="@+id/halvedBitmapImageView" android:layout_height="wrap_content" />

    </LinearLayout>
  </HorizontalScrollView>
</ScrollView>
La pregunta

¿Por qué ocurre?

Ambos métodos deben tener el mismo resultado, ya que ambos muestrean de la misma fuente y usan el mismo factor.

He intentado jugar con el método de reducción de muestras, pero nada me ha ayudado.

El uso de inDensity (en lugar de inSampleSize) parece solucionarlo, pero no estoy seguro de qué configurar. Creo que para imágenes externas (de Internet, por ejemplo), puedo establecer la densidad de la pantalla multiplicada por el tamaño de muestra que deseo usar.

¿Pero es incluso una buena solución? ¿Qué debo hacer en el caso de que las imágenes estén dentro de la carpeta de recursos (no creo que haya una función para obtener en qué carpeta de densidad se encuentra un mapa de bits)? ¿Por qué funciona mientras se usa la forma recomendada?aquí) no funciona bien?

EDITAR: He descubierto un truco para obtener qué densidad se usa para un dibujo que se obtiene de los recursos (enlace aquí). sin embargo, no es una prueba de futuro, ya que necesita ser específico a la densidad para detectar.

Respuestas a la pregunta(3)

Su respuesta a la pregunta