2012-04-02 1 views
1

Ich versuche, eine Unterklasse auf einem TextView durchzuführen. Es wird nicht funktionieren. Wenn ich die Klasse von TextView zu View erweitert. Es klappt. Aber ich brauche die Funktionalität von TextView.DrawLine oder DrawBitmap funktioniert nicht in TextView onDraw

Aber ich kann keine DrawLine oder DrawBitmap auf der OnDraw() Routine ausführen. Aber drawText() und drawColor() funktionieren. Ich verstehe nicht warum.

Ich kann kein Problem mit dem onDraw() finden. Kann mir jemand sagen, was ich falsch gemacht habe? Oder TextView erlaubt nicht, Bitmap oder Linien zu zeichnen? unten ist mein Code

package com.name.name; 

import android.content.Context; 

import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Paint.Align; 
import android.graphics.Typeface; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class RDisplay extends TextView { 
    Paint p; 
    private String mName = ""; 
    private static Bitmap mImage = null; 
    Context mContext; 

    public RDisplay (Context context) { 
     super(context); 
     mContext = context; 
     initComponent(); 

    } 

    public RDisplay (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mContext = context; 
     initComponent(); 
    } 

    public void initComponent() 
    { 
     p = new Paint(); 
     p.setTextSize(30); 
     p.setColor(Color.WHITE); 

    } 
    public void setName(String name) 
    { 
     mName = name; 

     String file = "f_" + name.toLowerCase(); 
      Drawable d = mContext.getResources().getDrawable(R.drawable.image); 
     mImage = ((BitmapDrawable)d).getBitmap(); 
     invalidate(); 
    } 
    @Override 
    protected void onDraw(Canvas canvas) { 
     //super.onDraw(canvas); 

     Paint paint = new Paint(); 
     paint.setStrokeWidth(20); 
     paint.setColor(Color.WHITE); 
     // drawText() Working 
     canvas.drawText(mName, 0, getMeasuredHeight(), paint); 
     // drawLine() Not Working 
     canvas.drawLine(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint); 

     if(mImage != null) 
     { canvas.drawColor(Color.BLACK); //Working 
      canvas.drawBitmap(mImage, 10, 10, null); // Not working 
     } 
    } 

    void setFont(String fontName) 
    { 
     Typeface font = Typeface.createFromAsset(mContext.getAssets(), fontName); 
     setTypeface(font); 
    } 
} 

Antwort

0

Es sieht aus wie Sie eigentlich nie setName(String) nennen, die mImage als null geht. Auch ist es eine gute Praxis, nicht Farben in zeichnen zu zeichnen. Erstellen Sie sie in einer Initialisierungsmethode und legen Sie sie nach Bedarf fest.

+0

Der setName wird als Funktionsaufruf außerhalb dieser Klasse verwendet. Ich erstelle nicht wirklich zuerst Farbe. Es ist nur so, dass ich die Bitmap nicht anzeigen konnte, also versuche ich eine Farbe zu erstellen, um zu sehen, ob ich wenigstens eine Linie ziehen könnte. Aber es konnte nicht. – cronosis