當前位置:首頁 » 安卓系統 » view陰影android

view陰影android

發布時間: 2025-09-19 22:27:20

1. Android 5.0 elevation 設置陰影無效

elevation 設置陰影需要注意兩點:
1、view需要設置背景
2、陰影是繪制在父控制項上的,子控制項和父控制項之間要留空隙,用padding也不行
在開發過程中有過這樣的布局:

我子Linearlayout是設置的圓角背景,結果這樣的效果是:只有圓角的便便才有一丁點的陰影,原因是父布局設置的是padding,子控制項是match_parent,空隙不足導致,將子布局改為margin,去掉父控制項的padding就行了

2. 安卓怎麼在linearLayout或者其他一些組件底部添加陰影

有兩種解決方案:

1、使用9-patch 圖片,製作一個陰影部分的圖片,然後橫向拉伸即可


2、使用layer-list

  • 在res/drawable下,新建background_with_shadow.xml文件,該文件代碼如下:

<?xmlversion="1.0"encoding="utf-8"?>
<layer-listxmlns:android="http://schemas.android.com/apk/res/android">

<!--bottomshadow-->
<item>
<shapeandroid:shape="rectangle">
<!--fromtoptobottom-->
<gradient
android:angle="90"
android:centerColor="#bbbbbb"
android:endColor="#d5d5d5"
android:startColor="#a9a09d"/>
<cornersandroid:radius="5dp"/>
</shape>
</item>

<!--content-->
<itemandroid:bottom="2dp">
<shapeandroid:shape="rectangle">
<solidandroid:color="#50c1e9"/>
<cornersandroid:radius="5dp"/>
</shape>
</item>

</layer-list>
  • 使用background_with_shadow.xml文件

假設有bottom_shadow.xml文件,內容如下:

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#bfbfbf">

<LinearLayout
android:layout_marginTop="40dp"
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="vertical"
android:background="@drawable/background_with_shadow">
</LinearLayout>

<TextView
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="活動海報"/>

</LinearLayout>
  • 效果圖如下

3. Android如何純java代碼實現字體陰影效果

Android實現純java代碼字體陰影效果,主要是通過activity的draw方法,進行重新繪制,如下代碼:

packagecanvas.test;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.PorterDuff;
importandroid.graphics.PorterDuff.Mode;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Rect;
importandroid.graphics.RectF;
importandroid.graphics.drawable.Drawable;
importandroid.view.View;
{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(newImageEffect(this));
}
classImageEffectextendsView{
Paintpaint;
publicImageEffect(Contextcontext){
super(context);
paint=newPaint();//初始化畫筆,為後面陰影效果使用。
paint.setAntiAlias(true);//去除鋸齒。
paint.setShadowLayer(5f,5.0f,5.0f,Color.BLACK);//設置陰影層,這是關鍵。
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
}
@Override
publicvoidonDraw(Canvascanvas){
super.onDraw(canvas);
intposX=20;
intposY=50;
intPicWidth,PicHegiht;
Drawabledrawable=getResources().getDrawable(R.drawable.button);
Drawabledbe=getResources().getDrawable(R.drawable.button).mutate();//如果不調用mutate方法,則原圖也會被改變,因為調用的資源是同一個,所有對象是共享狀態的。
DrawabledrawTest=getResources().getDrawable(R.drawable.button);
Bitmapbmp=BitmapFactory.decodeResource(getResources(),R.drawable.button);
PicWidth=drawable.getIntrinsicWidth();
PicHegiht=drawable.getIntrinsicHeight();
drawTest.setBounds(posX,(2*posY)+PicHegiht,posX+PicWidth,(2*posY)+2*PicHegiht);
drawable.setBounds(posX,posY,posX+PicWidth,posY+PicHegiht);
dbe.setBounds(0,0,PicWidth,PicHegiht);
canvas.drawColor(Color.WHITE);//設置畫布顏色
canvas.save(Canvas.MATRIX_SAVE_FLAG);
dbe.setColorFilter(0x7f000000,PorterDuff.Mode.SRC_IN);
canvas.translate(posX+(int)(0.9*PicWidth/2),posY+PicHegiht/2);//圖像平移為了剛好在原圖後形成影子效果。
canvas.skew(-0.9F,0.0F);//圖像傾斜效果。
canvas.scale(1.0f,0.5f);//圖像(其實是畫布)縮放,Y方向縮小為1/2。
dbe.draw(canvas);//此處為畫原圖像影子效果圖,比原圖先畫,則會在下層。
drawable.clearColorFilter();
canvas.restore();
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawable.draw(canvas);//此處為畫原圖像,由於canvas有層次效果,因此會蓋在影子之上。
canvas.restore();
//默認無效果原圖
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawTest.draw(canvas);
canvas.restore();
//圖片陰影效果
canvas.save(Canvas.MATRIX_SAVE_FLAG);
//Rectrect=newRect(2*posX+PicWidth,2*posY+PicHegiht,2*posX+2*PicWidth,2*posY+2*PicHegiht);//此為理論上的陰影圖坐標
Rectrect=newRect(2*posX+PicWidth+3,2*posY+PicHegiht+3,2*posX+2*PicWidth-2,2*posY+2*PicHegiht-2);
//由於圖片的實際尺寸比顯示出來的圖像要大一些,因此需要適當更改下大小,以達到較好的效果
RectFrectF=newRectF(rect);
canvas.drawRoundRect(rectF,10f,10f,paint);//在原有矩形基礎上,畫成圓角矩形,同時帶有陰影層。
canvas.drawBitmap(bmp,2*posX+PicWidth,2*posY+PicHegiht,null);//畫上原圖。
canvas.restore();
}
}
}
熱點內容
python重啟tomcat 發布:2025-09-20 00:05:28 瀏覽:152
linuxnmapon 發布:2025-09-19 23:57:23 瀏覽:161
家用電腦伺服器違法嗎 發布:2025-09-19 23:56:43 瀏覽:214
wordpress上傳中文 發布:2025-09-19 23:42:35 瀏覽:831
我的世界電腦版國內最大的伺服器 發布:2025-09-19 22:54:21 瀏覽:307
南郵演算法 發布:2025-09-19 22:30:44 瀏覽:776
view陰影android 發布:2025-09-19 22:27:20 瀏覽:517
為什麼c語言一保存就編譯不了 發布:2025-09-19 22:25:30 瀏覽:442
c語言寫的程序 發布:2025-09-19 22:17:10 瀏覽:118
java語言編譯 發布:2025-09-19 22:12:56 瀏覽:399