2016-07-17 2 views
0

Je vais avoir un problème avec le imageViewimageview Android sera plus grand sur le petit écran de l'appareil

il est plus grand quand je l'ouvre sur le dispositif d'écran petit

cette image montre différentes enter image description here

sur la taille de l'écran gauche de son 1440 * 2560 et le droit de sa taille 400 * 800

aussi c'est mon code xml ImageView

<RelativeLayout 

xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:id="@+id/tt"> 

<customfonts.RoundedImageView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/ssz2" 
android:scaleType="fitXY" 
android:adjustViewBounds="false" /> 

</RelativeLayout> 

et c'est la classe qui est fait mon image arrondie

public class RoundedImageView extends ImageView { 

public RoundedImageView(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

public RoundedImageView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public RoundedImageView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    Drawable drawable = getDrawable(); 

    if (drawable == null) { 
     return; 
    } 

    if (getWidth() == 0 || getHeight() == 0) { 
     return; 
    } 

    Bitmap b = null; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP 
      && drawable instanceof VectorDrawable) { 
     ((VectorDrawable) drawable).draw(canvas); 
     b = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas c = new Canvas(); 
     c.setBitmap(b); 
     drawable.draw(c); 
    } 
    else { 
     b = ((BitmapDrawable) drawable).getBitmap(); 
    } 

    Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); 

    int w = getWidth(), h = getHeight(); 

    Bitmap roundBitmap = getCroppedBitmap(bitmap, w); 
    canvas.drawBitmap(roundBitmap, 0,0, null); 
} 

public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { 
    Bitmap sbmp; 
    if(bmp.getWidth() != radius || bmp.getHeight() != radius) 
     sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false); 
    else 
     sbmp = bmp; 
    Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), 
      sbmp.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final int color = 0xffa19774; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); 

    paint.setAntiAlias(true); 
    paint.setFilterBitmap(true); 
    paint.setDither(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(Color.parseColor("#BAB399")); 
    canvas.drawCircle(sbmp.getWidth()/2+0.7f, sbmp.getHeight()/2+0.7f, 
      sbmp.getWidth()/2+0.1f, paint); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
    canvas.drawBitmap(sbmp, rect, rect, paint); 


    return output; 
    } 
} 

et la taille de la source imageView son 75 * 75

je veux faire la taille si ce imageView même dans tous les appareils

Répondre

1

Le problème que vous rencontrez est que l'image est la même taille en pixels. Mais comme la densité des pixels est plus faible sur l'écran vers la droite, elle apparaît plus grande.

Ce que vous devez faire est de prendre en compte les pixels et la densité de l'écran.

C'est ce que Google utilise dp pour s'assurer que les vues sont identiques même si les écrans sont différents entre les appareils.

Il y aurait différentes façons de résoudre cela, mais je pense que vous voulez convertir la taille de pixels en dp avant de dessiner sur la toile.

+0

un exemple ou un tutoriel à ce sujet? – medo

0

Vous utilisez

android:layout_width="wrap_content" 
android:layout_height="wrap_content" 

Si vous voulez utiliser la taille fixe

android:layout_width="75dp" 
android:layout_height="75dp" 

mais je vous conseil de ne pas.

En savoir plus sur l'indépendance densité https://developer.android.com/guide/practices/screens_support.html#density-independence

+0

'px' sa' faire mon ImageView' plus petit sur le grand écran – medo

+0

Mon erreur. Utilisez dp (aussi appelé dip comme pixels indépendants de la densité) – user345280

0

Le problème est que vos dimensions ImageView sont configurées pour être "wrap_content" et que la taille de votre contenu (source d'image) est déterminée à l'aide de pixels. Sur un appareil avec un écran plus petit où il y a moins de pixels, ces 75 pixels auront l'air relativement plus grands.

Vous devez définir votre ImageView d'avoir une taille fixe dp tels que:

android:layout_width="50dp" 
android:layout_height="50dp" 

Vous pouvez utiliser une calculatrice comme celle-ci: https://pixplicity.com/dp-px-converter/ pour obtenir les dimensions densité de pixels corrects.

+0

même aucune chose n'a changé le même résultat sur l'image – medo

0

Pour prendre en charge tous les périphériques d'écran, vous devez créer plusieurs copies de différentes dimensions.

res/drawable-mdpi/graphic.png   // bitmap for medium-density 
res/drawable-hdpi/graphic.png   // bitmap for high-density 
res/drawable-xhdpi/graphic.png  // bitmap for extra-high-density 
res/drawable-xxhdpi/graphic.png  // bitmap for extra-extra-high-density 

See Android official docs.

+0

Je sais que c'est mais je travaille pour l'application de chat donc cette image vient du serveur – medo