2011-02-23 1 views
2

j'ai une vue personnalisée ...comment puis-je obtenir la largeur et la hauteur de ma vue personnalisée?

package nan.salsa.goal.customview; 

import android.R; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.drawable.ShapeDrawable; 
import android.graphics.drawable.shapes.RectShape; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.View; 

public class DayView extends View { 

    private static String TAG="DayView"; 

    private ShapeDrawable mDrawable; 

    public DayView(Context context) { 
     super(context); 
    } 

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

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

    public void init() { 

     int x = 10; 
     int y = 10; 
     int width = 300; 
     int height = 300; 

     mDrawable = new ShapeDrawable(new RectShape()); 
     mDrawable.getPaint().setColor(0xff74AC23); 
     mDrawable.setBounds(x, y, x + width, y + height); 



    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     super.onDraw(canvas); 
     setBackgroundColor(R.color.black); 
     mDrawable.draw(canvas); 

    } 
} 

avec ce simple fichier de configuration:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:background="#E06F00"> 

    <nan.salsa.goal.customview.DayView android:id="@+id/dayView" 
     android:layout_height="match_parent" 
     android:layout_width="fill_parent" /> 


</LinearLayout> 

À mon avis je veux dinamically largeur ensemble de mon rectangle ...

i avez essayé:

View parent = getParent(); 
    int width = parent.getWidth(); 

// supprimer nullPointerException parce que parent est nul ...

et aussi:

  getRootView().getWidth(); 

// dans ce cas pas pointerException nulle, mais le retour de la méthode 0:

Comment puis-je faire?

concernant

Antonio Musella

+0

vous pouvez essayer cela, j'ai déjà répondu ici http: // stackoverflow .com/questions/11964499/comment-obtenir-hauteur-de-linearlayout/15803364 # 15803364 –

+0

vous pouvez essayer ceci J'ai déjà répondu ici http://stackoverflow.com/questions/11964499/how-to-get-height-of-linearlayout/15803364#15803364 –

+0

vous pouvez essayer ce que j'ai répondu ici http: // stackoverflow .com/questions/11964499/comment-obtenir-hauteur-de-linearlayout/15803364 # 15803364 –

Répondre

6

En ajoutant cette méthode à votre classe de vue personnalisée:

@Override 
    public void onSizeChanged (int w, int h, int oldw, int oldh){ 
     super.onSizeChanged(w, h, oldw, oldh); 
     screenW = w; 
     screenH = h; 
    } 
+0

merci d'essayer aussi vite que possible ... –

+0

malheureusement ne fonctionne pas ... les dimensions de largeur et de hauteur sont correctes mais dans mode de débogage semble que onSizeChanged est appelé après la méthode onDraw ... j'essaie aussi d'appeler invalidate() en onSizeChanged() sans succès –

+0

ok .. je me trompe ... fonctionne bien ... merci :) –

Questions connexes