на рисование на кнопку Android - PullRequest
       25

на рисование на кнопку Android

0 голосов
/ 23 сентября 2011

Сначала я новичок в Android. Хорошо, здесь идет.
Я пытаюсь переопределить onDraw кнопки, потому что я хочу создать кнопку с другим стилем ... Что-то немного другое. Теперь я могу нарисовать фон довольно легко, но я не могу понять, почему у меня нет текста на кнопке.

public class TriButton extends Button {

private Paint m_paint = new Paint();
private int m_color = 0XFF92C84D; //LIKE AN OLIVE GREEN.. 
public TriButton(Context context) {
    super(context);
    setBackgroundColor(Color.BLACK);
}
public void onDraw(Canvas iCanvas) {
    //draw the button background
    m_paint.setColor(m_color);      
    iCanvas.drawRoundRect(new RectF(0, 0,getWidth(),getHeight()), 30, 30, m_paint);
    //draw the text
    m_paint.setColor(Color.WHITE);
    iCanvas.drawText( "bash is king", 0, 0, m_paint);
}
public static RelativeLayout.LayoutParams GetRelativeParam(int iLeft, int iTop, int iWidth, int iHeight){
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(iHeight, iWidth);
    params.leftMargin = iLeft;
    params.topMargin = iTop;
    return params;
}
}

Вот код, который создает кнопку.

 RelativeLayout  relLay = new RelativeLayout(this);

    m_button = new TriButton(this);
    setContentView(relLay);

    relLay.addView(m_button, m_button.GetRelativeParam(0,0,100,500) );

Теперь все, что я прочитал, заставляет меня ожидать, что я вижу текст в моей оливковой кнопке овальной кнопки. Оливково-зеленый овал появляется, но в нем нет текста .. Это пустота. Зеленое пятно, которое смеется надо мной и напоминает мне своим молчанием, что я совершенно один :(.

Ответы [ 3 ]

3 голосов
/ 23 сентября 2011

Обычно вы делаете это через xml.

, например, поместите в макет вашего пользовательского класса следующее:

android:background="@drawable/shape"

, а затем что-то вроде того, что будет shape.xmlПомещенный в /drawable.

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
    android:width="2px"
    android:color="#555555"/>
    <corners
    android:radius="10px"/>
    <gradient
        android:startColor="#000000"
        android:endColor="#ffffff"
        android:angle="90"/>
</shape>

В этом примере создается скругленный прямоугольник с границей и градиентом в нем.Дайте мне знать, если вам нужны дальнейшие объяснения.

См. http://developer.android.com/guide/topics/ui/themes.html

1 голос
/ 23 сентября 2011

Хорошо, я понял, это не видно, потому что координаты (0,0) находятся слева внизу от кнопки, поэтому текст не виден.Попробуйте это, и это работает:

iCanvas.drawText( "bash is king", 0, 15, m_paint);

Оливково-зеленый - хороший выбор, кстати:)

0 голосов
/ 23 сентября 2011

Чтобы нарисовать текст в вашей кнопке, избавьтесь от вызова drawText () внутри onDraw вашего класса кнопки. Все, что вам нужно сделать, это вызвать setText для экземпляра кнопки, поскольку Button расширяет представление:

m_button.setText("bash is king");

Кроме того, для создания пользовательской кнопки вы можете рассмотреть возможность использования Image и присвоения ему OnClickListener.

...