Есть ли эквивалент для setShadowLayer при определении фигур в XML в Android? - PullRequest
5 голосов
/ 18 октября 2010

Если я рисую круглую прямоугольную форму по коду, я могу использовать setShadowLayer , чтобы получить тень для фигуры.Есть ли эквивалент при определении фигур в XML?

Следующий пример рисует круглый прямоугольный фон для фигуры.Что мне нужно добавить, чтобы добавить тень к форме?Возможно ли вообще использовать XML?

shape_test.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#8067BF6A"/>    
    <stroke android:width="3dp" android:color="#80000000" />
    <padding android:left="1dp"
      android:top="1dp"
      android:right="1dp"
      android:bottom="1dp" /> 
    <corners android:bottomRightRadius="7dp"
      android:bottomLeftRadius="7dp"
      android:topLeftRadius="7dp"
      android:topRightRadius="7dp"/> 
</shape>

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:padding="10dp"
 android:background="#ffdddddd"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
 <Button android:background="@drawable/shape_test"
 android:padding="5dp"
 android:textStyle="bold"
 android:textSize="28sp"
 android:text="Hello"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
</LinearLayout>

1 Ответ

5 голосов
/ 18 октября 2010

Используя XML, я не знаю реального способа сделать это.Я видел несколько предложений сделать вторую коробку той же формы позади предмета и просто залить ее черным, но я не думаю, что это хорошее решение.Я пытался найти способ сделать это сам некоторое время.

Если это поможет, вот ссылка на похожий вопрос, который я написал, вместе с некоторым кодом.У меня это работает на некоторых изображениях, но иногда кажется, что иногда трудно найти альфа-канал.По сути, я переопределил ImageView и поместил это в метод onDraw():

@Override 
protected void onDraw(Canvas canvas)  
{ 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.omen); 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setShadowLayer(5.5f, 6.0f, 6.0f, Color.BLACK); 
    canvas.drawColor(Color.GRAY); 
    canvas.drawRect(50, 50, 50 + bmp.getWidth(), 50 + bmp.getHeight(), paint); 
    canvas.drawBitmap(bmp, 50, 50, null);        
} 

Это было просто тестирование, поэтому очевидно, что многие параметры должны были быть более общими.У меня не было много времени, чтобы работать над этим в последнее время, но, возможно, это поможет вам найти ваш ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...