2013-05-22 4 views
2

У меня есть текстовое представление с фоном, определенным в XML-файле.Получить цвет фона textView с ShapeDrawable

  <TextView 
      android:id="@+id/event_tvColor" 
      android:layout_width="40dip" 
      android:layout_height="40dip" 
      android:text=" " 
      android:background="@drawable/et_style_color_service_edit" 
      android:clickable="true" 
      /> 

      xml file : et_style_color_service_edit.xml 

      <?xml version="1.0" encoding="UTF-8"?> 
       <shape xmlns:android="http://schemas.android.com/apk/res/android" 
        android:shape="oval">   
       <solid android:color="@color/eventColor"/> 
       <stroke android:width="0sp" android:color="#FFFFFF" /> 
       <size android:width="20dp" 
         android:height="20dp"/> 
       </shape> 

И мне нужно получить цвет, который имеет вид за один раз.

ShapeDrawable sc = (ShapeDrawable)tvColor.getBackground(); 
    ............... 

Обратите внимание, что мне нужно использовать ShapeDrawable, а не GradientDrawable. Благодарим вас за помощь и время.

Решение ........

 Solution The xml loads into the app as a gradientdrawable and not as a shapedrawable. We have to define the shapeDrawable in java 

      ShapeDrawable sd = new ShapeDrawable(new RectShape); 
      sd.getPaint().setColor(0xFF0000FF); 

если кто-нибудь есть лучшее решение, можно сказать.

ответ

4

После дальнейших исследований в настоящее время нет способа получить загруженный xml цвет ShapeDrawable. Что вам нужно сделать, это просто отслеживать изменения цвета, чтобы вы знали, какой цвет вы его устанавливаете, то есть:

int currentColor = Color.WHITE; //this is the default color (color set in xml) 

public void changeColor() { 
    if (currentColor == Color.WHITE) { 
     currentColor = Color.BLUE; 
    } else { 
     currentColor = Color.WHITE; 
    } 
    GradientDrawable gd = (GradientDrawable)tvColor.getBackground(); 
    gd.setColor(currentColor); 
} 
+0

Hello Zed Scio. Спасибо за ваш ответ. Я пытаюсь ShapeDrawable sc = (ShapeDrawable) tvColor.getBackground(); int color = sc.getPaint(). GetColor(); , Но дайте мне ошибку. java.lang.ClassCastException: android.graphics.drawable.GradientDrawable не может быть отброшен в android.graphics.drawable.ShapeDrawable ... И я не понимаю, потому что элемент в XML-файле служит для рисования с возможностью рисования и градиента .... любая идея Зэда? –

+1

Согласно http://stackoverflow.com/questions/3066892/how-to-import-shape-resourcexml-to-code, xml загружает приложение в качестве gradientdrawable. Мое предложение состоит в том, чтобы сделать ShapeDrawable в java, а затем установить его в EditText –

+0

. Я не понимаю «Make shapeDrawable in java». Вы можете привести пример zed scio? Большое спасибо за вашу помощь. –

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