2011-08-21 1 views
0

J'étend ImageView afin de mettre à l'échelle manuellement une image dans la vue. Je veux redimensionner une image pour remplir la largeur de la vue personnalisée, puis dessiner sur le canevas, cependant, je suis incapable d'obtenir la largeur de vue en utilisant this.getWidth() Il renvoie juste 0, car la vue n'a pas encore été dessinée et a donc des dimensions 0 par 0.Mettre à l'échelle l'image dans la vue personnalisée ImageView

Actuellement, je donne les résultats suivants dans mon main.xml:

<com.android.myapp.BackgroundView 
    android:id="@+id/background_view" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:src="@drawable/background" 
    android:dither="true" 
    /> 

la classe personnalisée est la suivante:

public class BackgroundView extends ImageView { 

    private Paint paint; 
    private Bitmap background; 

    public BackgroundView(Context context) { 
     super(context); 
     paint = new Paint(); 
     loadBitmap(); 
    } 

    public BackgroundView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     paint = new Paint(); 
     loadBitmap(); 
    } 

    public void loadBitmap() { 
     BitmapDrawable src = (BitmapDrawable) this.getDrawable(); 
     background = src.getBitmap(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawBitmap(background, 0, 0, paint); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 

} 

ma classe est Main.java :

public class Main extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

Je ne peux pas utiliser
Bitmap.createScaledBitmap(background, view.getWidth(), view.getHeight(), false)
que la vue n'a pas encore été établi, comment pourrais-je aller sur l'échelle de l'image pour remplir la largeur de vue/écran à ce moment?

Merci d'avance.

Répondre

1

Je crois que ce que vous voulez faire pourrait également être réalisé en utilisant ImageView directement en conjonction avec l'attribut scaleType. Utilisez soit fitXY ou centreCrop, en fonction de vos besoins. Mais pour répondre à la question, vous ne pouvez utiliser que getWidth() et getHeight() après l'appel de layout(). Vous devriez donc pouvoir utiliser les valeurs de votre méthode onDraw.

Vous pouvez également utiliser une autre méthode drawBitmap afin de ne pas avoir à créer une nouvelle image en mémoire.

Questions connexes