2012-01-04 5 views
9

Я пытаюсь создать нижнюю панель с фоном, как это:полосатый фон с двумя цветами?

enter image description here

В настоящее время я использую следующий код:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 


    <item> 
     <shape> 
      <gradient android:endColor="#000000" android:startColor="#696969" 
       android:centerColor="#696969" android:angle="270" /> 
      <stroke android:color="#696969" /> 
      <padding android:left="2dp" android:top="3dp" android:right="2dp" 
       android:bottom="3dp" /> 
     </shape> 
    </item> 
</selector> 

Но результат выглядит следующим образом ...:

enter image description here

Как получить это, два цветные backgro und? Пожалуйста, предложите .. Спасибо

+0

Проверьте это .. http://stackoverflow.com/a/9393867/1188978 – SkyWalker

ответ

12

Как указывалось в других пунктах, девяностота была бы идеальной в этой ситуации (и не займет много памяти). Работа с XML не является оптимальной. Вот то, что вы можете попробовать:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:bottom="20dp"> 
     <shape android:shape="rectangle" > 
      <size android:height="20dp" /> 
      <solid android:color="#ff0000" /> 
     </shape> 
    </item> 

    <item android:top="20dp"> 
     <shape android:shape="rectangle" > 
      <size android:height="20dp" /> 
      <solid android:color="#0000ff" /> 
     </shape> 
    </item> 
</layer-list> 

в этом случае ваш взгляд считается неоспоримым 40dp высокой

Это список слой с двумя блоками в разных цветах. Проблема с XML-подходом заключается в том, что вы не можете настроить высоту блоков в процентах (= 50%). Вы должны использовать половину фактического размера вида в dp. Это означает, что вы должны настраивать этот показатель каждый раз, когда вы изменяете высоту/макет вида. Девятикратная корректировка будет автоматически изменена.

0

Вы можете просто создать изображение и повторить его по координате x.

0

Вы можете использовать изображение 9png в качестве фона.
см http://developer.android.com/guide/developing/tools/draw9patch.html

редактировать:
Вы можете читать этот учебник http://android10.org/index.php/articlesother/279-draw-9-patch-tutorial

+0

спасибо, но я не хочу использовать изображения ... я ищу какой-то программный способ ... :) –

4

Создать gradient.xml в/RES/вытяжке:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFFFF" 
     android:endColor="#00000000"/>  
</shape> 

и в файле макета main.xml в/Рез/макет:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/gradient"> 
</LinearLayout> 

Вы можете указать th e, заменив значение android: angle и начальный/конечный цвет, заменив android:startColor и android:endColor.

+0

45 angle? Это не создает то, что просит нибха. – TryTryAgain

+0

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

+0

http://www.dibbus.com/2011/02/gradient-buttons-for-android/ пройти через этот код, это может помочь u .... –

1

Я нашел решение для вас, если вы готовы отказаться от использования XML, чтобы нарисовать его ...

Рисунок из: Gradients and shadows on buttons

Вот что вы хотите! Но разные цвета, размер и как кнопка ...

Bitmap bmResult = Bitmap.createBitmap(buttonWidth, buttonHeight, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bmResult); 
    Paint paint = new Paint(); 
    paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0xFF284560, 0xFF284060, TileMode.MIRROR)); 
    canvas.drawPaint(paint); 
    paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0x55FFFFFF, 0x22FFFFFF, TileMode.CLAMP)); 
    paint.setMaskFilter(new BlurMaskFilter(3, BlurMaskFilter.Blur.NORMAL)); 
    canvas.drawRect(0, 0, bmResult.getWidth(), bmResult.getHeight()/2, paint) 

... изменение цвета, конечно.

Я не уверен, что вы могли бы использовать XML-макет и ссылаться на эту Java-кнопку самостоятельно, или вам придется закончить создание всего макета на Java, а не XML ... это будет другим вопросом для ТАК.

Надеюсь, что это поможет. Хотя, возможно, это мое невежество, но я бы также рекомендовал переходить на маршрут 9patch.

P.S. Я совершенно новый на Java и использую растровые изображения, поэтому я опубликую более полное решение для вашего дела, если я все выясню.

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