Как показать тень вокруг linearlayout в Android?

Как я могу показать тень для моего линейного макета. Я хочу белый цветной округлый фон с тенью вокруг linearlayout. Я сделал это до сих пор. Пожалуйста, помогите мне. Заранее спасибо.

   

И rounded_rect_shape.xml в каталоге xml

       

В Android нет такого атрибута, чтобы показать тень. Но возможные способы сделать это:

  1. Добавьте простой LinearLayout с серым цветом, над которым добавьте ваш фактический макет, с краем внизу и справа, равным 1 или 2 dp

  2. Получите 9-патч-изображение с тенью и установите его как фон для вашего линейного макета

Существует еще одно решение проблемы путем реализации списка слоев, который будет использоваться в качестве фона для LinearLayoout.

Добавьте файл background_with_shadow.xml в res/drawable . Содержит:

                

Затем добавьте список слоев в качестве фона в LinearLayout.

  

Ну, этого легко достичь.

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

Вот пример, этот файл должен быть создан внутри res/drawable , я shadow.xml его shadow.xml :

       

Поместите следующий код из LinearLayout , например, установите android:layout_width и android:layout_height для fill_parent и 2.3dp , у вас будет хороший эффект тени на LinearLayout .

   

Примечание 1: Если вы увеличиваете android:layout_height будет android:layout_height больше тени.

Примечание 2: Используйте android:layout_above="@+id/id_from_your_LinearLayout" если вы размещаете этот код внутри RelativeLayout, иначе игнорируете его.

Надеюсь, что это поможет кому-то.

Для леденцов и выше вы можете использовать высоту .

Для более старых версий:

Вот ленивый взломать: http://odedhb.blogspot.com/2013/05/android-layout-shadow-without-9-patch.html

(toast_frame не работает на KitKat, тень удалена из тостов)

просто используйте:

 android:background="@android:drawable/toast_frame" 

или:

 android:background="@android:drawable/dialog_frame" 

в качестве фона

Примеры:

  

и с другим цветом bg:

    

Попробуйте это. Layout_shadow.xml

                

Примените к вашему макету как это

  android:background="@drawable/layout_shadow" 

На самом деле я согласен с @odedbreiner, но я помещаю dialog_frame внутри первого слоя и скрываю черный фон под белым слоем.

                
  1. Сохраните это 9.png. (измените имя на 9.png )

введите описание изображения здесь

2. Сохраните его в своей возможности.

3.Вставьте его в свой макет.

4.set padding.

Например :

  . . .  

Создайте новый XML в качестве примера с именем «shadow.xml» в DRAWABLE со следующим кодом (вы можете изменить его или найти еще лучше):

              

После создания XML в LinearLayout или другого виджета вы хотите создать тень, вы используете свойство BACKGROUND, чтобы увидеть efect. Это было бы что-то вроде:

  

Одним из возможных решений является использование девяти патч-изображений, таких как http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

ИЛИ

Я сделал это следующим образом. Это мой основной макет, в котором round_corner.xml и drop_shadow.xml используются в качестве фонового ресурса. round_corner_two такой же, как round_corner.xml, только атрибут цвета отличается. скопируйте round_corner.xml, drop_shadow.xml и round_conere_two.xml в папку с рисунком.

       1       

round_corner.xml:

                1                1                1                

drop_shadow.xml

                

Я знаю, что это слишком поздно. но у меня было такое же требование. я так решил

    

вам нужно добавить зависимость:

 compile 'com.android.support:cardview-v7:25.0.1' 

установите этот xml drwable в качестве фона; —

      -->Your shadow color<--     -->here you can customize the shadow size<---       

Вы можете использовать следующий class для тега xml:

 import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BlurMaskFilter; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.Rect; import android.os.Build; import android.support.annotation.FloatRange; import android.util.AttributeSet; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.FrameLayout; import com.webappmate.weeassure.R; /** * Created by GIGAMOLE on 13.04.2016. */ public class ShadowLayout extends FrameLayout { // Default shadow values private final static float DEFAULT_SHADOW_RADIUS = 30.0F; private final static float DEFAULT_SHADOW_DISTANCE = 15.0F; private final static float DEFAULT_SHADOW_ANGLE = 45.0F; private final static int DEFAULT_SHADOW_COLOR = Color.DKGRAY; // Shadow bounds values private final static int MAX_ALPHA = 255; private final static float MAX_ANGLE = 360.0F; private final static float MIN_RADIUS = 0.1F; private final static float MIN_ANGLE = 0.0F; // Shadow paint private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG) { { setDither(true); setFilterBitmap(true); } }; // Shadow bitmap and canvas private Bitmap mBitmap; private final Canvas mCanvas = new Canvas(); // View bounds private final Rect mBounds = new Rect(); // Check whether need to redraw shadow private boolean mInvalidateShadow = true; // Detect if shadow is visible private boolean mIsShadowed; // Shadow variables private int mShadowColor; private int mShadowAlpha; private float mShadowRadius; private float mShadowDistance; private float mShadowAngle; private float mShadowDx; private float mShadowDy; public ShadowLayout(final Context context) { this(context, null); } public ShadowLayout(final Context context, final AttributeSet attrs) { this(context, attrs, 0); } public ShadowLayout(final Context context, final AttributeSet attrs, final int defStyleAttr) { super(context, attrs, defStyleAttr); setWillNotDraw(false); setLayerType(LAYER_TYPE_HARDWARE, mPaint); // Retrieve attributes from xml final TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ShadowLayout); try { setIsShadowed(typedArray.getBoolean(R.styleable.ShadowLayout_sl_shadowed, true)); setShadowRadius( typedArray.getDimension( R.styleable.ShadowLayout_sl_shadow_radius, DEFAULT_SHADOW_RADIUS ) ); setShadowDistance( typedArray.getDimension( R.styleable.ShadowLayout_sl_shadow_distance, DEFAULT_SHADOW_DISTANCE ) ); setShadowAngle( typedArray.getInteger( R.styleable.ShadowLayout_sl_shadow_angle, (int) DEFAULT_SHADOW_ANGLE ) ); setShadowColor( typedArray.getColor( R.styleable.ShadowLayout_sl_shadow_color, DEFAULT_SHADOW_COLOR ) ); } finally { typedArray.recycle(); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); // Clear shadow bitmap if (mBitmap != null) { mBitmap.recycle(); mBitmap = null; } } public boolean isShadowed() { return mIsShadowed; } public void setIsShadowed(final boolean isShadowed) { mIsShadowed = isShadowed; postInvalidate(); } public float getShadowDistance() { return mShadowDistance; } public void setShadowDistance(final float shadowDistance) { mShadowDistance = shadowDistance; resetShadow(); } public float getShadowAngle() { return mShadowAngle; } @SuppressLint("SupportAnnotationUsage") @FloatRange public void setShadowAngle(@FloatRange(from = MIN_ANGLE, to = MAX_ANGLE) final float shadowAngle) { mShadowAngle = Math.max(MIN_ANGLE, Math.min(shadowAngle, MAX_ANGLE)); resetShadow(); } public float getShadowRadius() { return mShadowRadius; } public void setShadowRadius(final float shadowRadius) { mShadowRadius = Math.max(MIN_RADIUS, shadowRadius); if (isInEditMode()) return; // Set blur filter to paint mPaint.setMaskFilter(new BlurMaskFilter(mShadowRadius, BlurMaskFilter.Blur.NORMAL)); resetShadow(); } public int getShadowColor() { return mShadowColor; } public void setShadowColor(final int shadowColor) { mShadowColor = shadowColor; mShadowAlpha = Color.alpha(shadowColor); resetShadow(); } public float getShadowDx() { return mShadowDx; } public float getShadowDy() { return mShadowDy; } // Reset shadow layer private void resetShadow() { // Detect shadow axis offset mShadowDx = (float) ((mShadowDistance) * Math.cos(mShadowAngle / 180.0F * Math.PI)); mShadowDy = (float) ((mShadowDistance) * Math.sin(mShadowAngle / 180.0F * Math.PI)); // Set padding for shadow bitmap final int padding = (int) (mShadowDistance + mShadowRadius); setPadding(padding, padding, padding, padding); requestLayout(); } private int adjustShadowAlpha(final boolean adjust) { return Color.argb( adjust ? MAX_ALPHA : mShadowAlpha, Color.red(mShadowColor), Color.green(mShadowColor), Color.blue(mShadowColor) ); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // Set ShadowLayout bounds mBounds.set( 0, 0, MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec) ); } @Override public void requestLayout() { // Redraw shadow mInvalidateShadow = true; super.requestLayout(); } @Override protected void dispatchDraw(final Canvas canvas) { // If is not shadowed, skip if (mIsShadowed) { // If need to redraw shadow if (mInvalidateShadow) { // If bounds is zero if (mBounds.width() != 0 && mBounds.height() != 0) { // Reset bitmap to bounds mBitmap = Bitmap.createBitmap( mBounds.width(), mBounds.height(), Bitmap.Config.ARGB_8888 ); // Canvas reset mCanvas.setBitmap(mBitmap); // We just redraw mInvalidateShadow = false; // Main feature of this lib. We create the local copy of all content, so now // we can draw bitmap as a bottom layer of natural canvas. // We draw shadow like blur effect on bitmap, cause of setShadowLayer() method of // paint does`t draw shadow, it draw another copy of bitmap super.dispatchDraw(mCanvas); // Get the alpha bounds of bitmap final Bitmap extractedAlpha = mBitmap.extractAlpha(); // Clear past content content to draw shadow mCanvas.drawColor(0, PorterDuff.Mode.CLEAR); // Draw extracted alpha bounds of our local canvas mPaint.setColor(adjustShadowAlpha(false)); mCanvas.drawBitmap(extractedAlpha, mShadowDx, mShadowDy, mPaint); // Recycle and clear extracted alpha extractedAlpha.recycle(); } else { // Create placeholder bitmap when size is zero and wait until new size coming up mBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565); } } // Reset alpha to draw child with full alpha mPaint.setColor(adjustShadowAlpha(true)); // Draw shadow bitmap if (mCanvas != null && mBitmap != null && !mBitmap.isRecycled()) canvas.drawBitmap(mBitmap, 0.0F, 0.0F, mPaint); } // Draw child`s super.dispatchDraw(canvas); } } 

используйте тег в xml следующим образом:

    

ОБНОВИТЬ

введите приведенный ниже код в attrs.xml в ресурсе >> значения

         

Я знаю, что это старо, но для большинства этих ответов требуется тонна дополнительного кода.

Если у вас светлый цвет фона, вы можете просто использовать это:

 android:elevation="25dp" 
Interesting Posts
Давайте будем гением компьютера.