2009-09-24 5 views
10

Ich erstelle eine benutzerdefinierte Bildansicht durch Erweiterung von ImageView, die nur etwas Text auf dem Bildschirm zeichnet, aber ich sehe nichts im Emulator-Bildschirm gemalt, aber die Protokollmeldungen und die Printlns werden in der Protokollkonsole gedruckt . Mache ich nicht etwas?Erstellen benutzerdefinierter ImageView

Dies ist meine Tätigkeit

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"); 
    } 
} 

Dieses

mein CustomImageView ist
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); 

    } 
} 

Auch die Protokollmeldung in der onTouchEvent() gedruckt wird, aber nichts gemalt.

Das ist mein main.xml, dass das Layout

<?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> 

Antwort

3

Verwenden Farbwerte Color.White oder Color.BLACK statt hexa Werte hat.

+0

Nein es nicht – Ram

+0

@Ram funktioniert - Das einzige Problem war die Farbwerte. Wir sollten die Color-Klasse verwenden, um Farbwerte zu generieren. – bhatt4982

+2

Oder verwenden Sie Farbe Hexa-Wert im Format 0xAARRGGBB. weiß = 0xFFFFFFFF und schwarz = 0xFF000000 – bhatt4982

1

Haben Sie Ihre Leinwandgröße überprüft? Eine Bildansicht erwartet, dass das Bitmap/Drawable seine Größe zurückgibt und basierend auf den Flags für den Maßstabstyp die Größe der Ansicht bestimmt. Ich sehe nichts in Ihrem Code, das die Größe der Ansicht für Layoutanforderungen bestimmt.

-Rick