2014-02-04 5 views
0

Я создаю небольшой калькулятор для Android. Клавиатура калькулятора создается Java код в OnDraw:Цвет кнопки при нажатии

public void onDraw(Canvas canvas){ 
    buttonH = height/rows; 
    Paint paint = new Paint(); 
    paint.setTextAlign(Paint.Align.CENTER); 
    AssetManager assetManager = getResources().getAssets(); 
     Typeface tf = Typeface.create(Typeface.createFromAsset(assetManager,"fonts/font.ttf"), 
    Typeface.NORMAL); 

    paint.setTypeface(tf); 
    paint.setAntiAlias(true); 

    textSize = (width+height)/43; 

    paint.setTextSize(textSize); 
    paint.setColor(Color.rgb(0, 0, 0)); 

    Bitmap[][] buttons = new Bitmap[rows][]; 
    int spacing = (width+height)/400; 

    LinearGradient gradient = new LinearGradient(buttonW/2,0,buttonW/2,buttonH, 
       buttonShade,null,Shader.TileMode.REPEAT); 

    for(int i = 0; i < rows; i++){ 
     int thisColumns = cScreen[i].length; 
     buttons[i] = new Bitmap[thisColumns]; 
     buttonW = width/thisColumns; 
     for(int j = 0; j < thisColumns; j++){ 

      buttons[i][j] = Bitmap.createBitmap(buttonW,buttonH,Bitmap.Config.ARGB_8888); 
      Canvas temp = new Canvas(buttons[i][j]); 
      paint.setShader(gradient1); 
      RectF rect = new RectF(spacing,spacing,buttonW-spacing,buttonH-spacing); 
      temp.drawRoundRect(rect, width/100,height/100,paint); 
      paint.setShader(null); 
      temp.drawText(cScreen[i][j],buttonW/2,(buttonH+textSize)/2,paint); 
      canvas.drawBitmap(buttons[i][j], buttonW*j+shift,buttonH*i, paint); 
     } 
    } 
} 

, но я хотел бы, чтобы окрасить область кнопки при нажатии на кнопку

enter image description here

+0

использовать ресурс, доступный для этой кнопки http://stackoverflow.com/a/2668538/2181456 .onDraw является более дорогостоящим – Akilan

+0

кнопка создана как растровое изображение не в xml – bisssi

+0

Если вы использовали прозрачные растровые изображения для кнопки и сами рисовали фон вам будет намного легче ИМО. и если вы используете обычные кнопки на макете, это будет еще проще. –

ответ

2

Если вы хотите просто покрасьте кнопку, пока она нажата, вы можете реализовать это с помощью xml.

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_focused="true" android:state_pressed="true" 
      android:drawable="@drawable/bg_clolor_highlight" /> 
     <item android:state_focused="false" android:state_pressed="true" 
      android:drawable="@drawable/bg_clolor_highlight" /> 
     <item android:drawable="@drawable/bg_clolor_normal" /> 
    </selector> 

В противном случае вы можете просто позвонить .setBackgroundColor (your_color) на кнопку.

+1

кнопка создана как растровое изображение не в xml – bisssi

+0

@bisssi было бы желательно создать кнопки в xml. Гораздо проще и удобнее. Конечно, если вы не делаете этого, чтобы учиться живописи в Холсте. –

1

Создайте другой объект Paint в OnDraw для кнопки щелкнутой:

Paint p=new Paint(); 
paint.setColor(Color.RED); 

Получить координаты позиции мыши на холсте:

в конструкторе Закрепление onTouch слушателя()

float x,y; 

this.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View arg0, MotionEvent event) { 
      x=event.getX();y=event.getY(); 
    } 
}); 

in onDraw:

Paint p=new Paint(); 
    paint.setColor(Color.RED); 
for(int i = 0; i < rows; i++){ 
    int thisColumns = cScreen[i].length; 
    buttons[i] = new Bitmap[thisColumns]; 
    buttonW = width/thisColumns; 

    for(int j = 0; j < thisColumns; j++){ 
     Paint tempPaint; 
     if(x> buttonW*j+shift&&x< buttonW*j+shift+buttonW&&y>buttonH*i&&y<buttonH*i+buttonH) 
     tempPaint=p; 
     else 
     tempPaint=paint; 
     buttons[i][j] = Bitmap.createBitmap(buttonW,buttonH,Bitmap.Config.ARGB_8888); 
     Canvas temp = new Canvas(buttons[i][j]); 
     tempPaint.setShader(gradient1); 
     RectF rect = new RectF(spacing,spacing,buttonW-spacing,buttonH-spacing); 
     temp.drawRoundRect(rect, width/100,height/100,tempPaint); 
     tempPaint.setShader(null); 
     temp.drawText(cScreen[i][j],buttonW/2,(buttonH+textSize)/2,tempPaint); 

     canvas.drawBitmap(buttons[i][j], buttonW*j+shift,buttonH*i, tempPaint); 
    } 
} 
+0

извините, но не работает – bisssi

Смежные вопросы