2009-09-24 7 views
10

Je crée une vue d'image personnalisée en étendant ImageView qui dessine du texte à l'écran, mais je ne vois rien de peint dans l'écran Emulator, mais les messages de journal et les printlns sont imprimés dans la console de journal . Est-ce que je ne fais pas quelque chose?Création de ImageView personnalisée

Ceci est mon activité

public class HelloAndroidActivity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     //  setContentView(R.layout.main); 
     CustomImageView myView = new CustomImageView(getApplicationContext()); 
     System.out.println("Setting the view"); 
     myView.invalidate(); 
     setContentView(myView); 
     System.out.println("Calling invalidate"); 
    } 
} 

Ceci est mon CustomImageView

public class CustomImageView extends ImageView 
{ 

    /** 
    * @param context 
    */ 
    public CustomImageView(Context context) 
    { 
     super(context); 
     // TODO Auto-generated constructor stub 
     setBackgroundColor(0xFFFFFF); 
    } 

    /** 
    * @param context 
    * @param attrs 
    */ 
    public CustomImageView(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @param context 
    * @param attrs 
    * @param defStyle 
    */ 
    public CustomImageView(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     // TODO Auto-generated method stub 
       super.onDraw(canvas); 
     System.out.println("Painting content"); 
     Paint paint = new Paint(Paint.LINEAR_TEXT_FLAG); 
     paint.setColor(0x0); 
     paint.setTextSize(12.0F); 
     System.out.println("Drawing text"); 
     canvas.drawText("Hello World in custom view", 100, 100, paint); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     // TODO Auto-generated method stub 
     Log.d("Hello Android", "Got a touch event: " + event.getAction()); 
     return super.onTouchEvent(event); 

    } 
} 

Même le message de journal dans le onTouchEvent() est imprimé, mais rien est peint.

Ceci est mon main.xml qui a la mise en page

<?xml version="1.0" encoding="utf-8"?> 

<AbsoluteLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/AbsoluteLayout"> 
</AbsoluteLayout> 

Répondre

3

Utiliser les valeurs de couleur Color.White ou Color.BLACK au lieu des valeurs hexa.

+0

Non, il ne fonctionne pas – Ram

+0

@Ram - Seul problème, ce sont les valeurs de couleur. Nous devrions utiliser la classe Color pour générer des valeurs de couleur. – bhatt4982

+2

Ou utilisez la valeur hexa de couleur au format 0xAARRGGBB. blanc = 0xFFFFFFFF et noir = 0xFF000000 – bhatt4982

1

Avez-vous vérifié la taille de votre toile? Une vue d'image s'attend à ce que la bitmap/drawable retourne sa taille et, en fonction des indicateurs scaletype, détermine la taille de la vue. Je ne vois rien dans votre code qui détermine la taille de la vue pour les besoins de mise en page.

-Rick

Questions connexes