Android實(shí)現(xiàn)圖片陰影效果的方法
本文實(shí)例介紹了Android實(shí)現(xiàn)圖片陰影效果,設(shè)置畫布顏色,圖像傾斜效果,圖片陰影效果的方法,采用canvas.save(Canvas.MATRIX_SAVE_FLAG);來實(shí)現(xiàn)。由于圖片的實(shí)際尺寸比顯示出來的圖像要大一些,因此需要適當(dāng)更改下大小,以達(dá)到較好的效果,在原有矩形基礎(chǔ)上,畫成圓角矩形,同時帶有陰影層。讀者可以根據(jù)自身需要對該程序代碼進(jìn)行個性化的修改以便更符合自身項目需求。
具體實(shí)現(xiàn)代碼如下:
package canvas.test;
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.view.View;
public class ShaderEffect extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new ImageEffect(this));
}
class ImageEffect extends View{
Paint paint;
public ImageEffect (Context context){
super(context);
paint = new Paint();//初始化畫筆,為后面陰影效果使用。
paint.setAntiAlias(true);//去除鋸齒。
paint.setShadowLayer(5f, 5.0f, 5.0f, Color.BLACK);//設(shè)置陰影層,這是關(guān)鍵。
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
int posX = 20;
int posY = 50;
int PicWidth,PicHegiht;
Drawable drawable = getResources().getDrawable(R.drawable.button);
Drawable dbe = getResources().getDrawable(R.drawable.button).mutate();//如果不調(diào)用mutate方法,則原圖也會被改變,因?yàn)檎{(diào)用的資源是同一個,所有對象是共享狀態(tài)的。
Drawable drawTest = getResources().getDrawable(R.drawable.button);
Bitmap bmp = 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);//設(shè)置畫布顏色
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);//圖像(其實(shí)是畫布)縮放,Y方向縮小為1/2。
dbe.draw(canvas);//此處為畫原圖像影子效果圖,比原圖先畫,則會在下層。
drawable.clearColorFilter();
canvas.restore();
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawable.draw(canvas);//此處為畫原圖像,由于canvas有層次效果,因此會蓋在影子之上。
canvas.restore();
//默認(rèn)無效果原圖
canvas.save(Canvas.MATRIX_SAVE_FLAG);
drawTest.draw(canvas);
canvas.restore();
//圖片陰影效果
canvas.save(Canvas.MATRIX_SAVE_FLAG);
//Rect rect = new Rect(2*posX + PicWidth, 2*posY + PicHegiht, 2*posX + 2*PicWidth, 2*posY + 2*PicHegiht);//此為理論上的陰影圖坐標(biāo)
Rect rect = new Rect(2*posX + PicWidth + 3, 2*posY + PicHegiht + 3, 2*posX + 2*PicWidth - 2, 2*posY + 2*PicHegiht - 2);
//由于圖片的實(shí)際尺寸比顯示出來的圖像要大一些,因此需要適當(dāng)更改下大小,以達(dá)到較好的效果
RectF rectF = new RectF(rect);
canvas.drawRoundRect(rectF, 10f, 10f, paint);//在原有矩形基礎(chǔ)上,畫成圓角矩形,同時帶有陰影層。
canvas.drawBitmap(bmp, 2*posX + PicWidth, 2*posY + PicHegiht, null);//畫上原圖。
canvas.restore();
}
}
}
- Android實(shí)現(xiàn)圓角Button按鈕
- Android中給按鈕同時設(shè)置背景和圓角示例代碼
- Android中快速便捷的實(shí)現(xiàn)圓角按鈕方法詳解
- Android實(shí)現(xiàn)空心圓角矩形按鈕的實(shí)例代碼
- Android圓角按鈕的制作方法
- Android設(shè)置控件陰影的三種方法
- Android 給控件添加邊框陰影效果
- Android 自定義陰影效果詳解及實(shí)例
- Android編程之陰影(Shadow)制作方法
- Android控件陰影顏色調(diào)整示例
- Android開發(fā)實(shí)現(xiàn)的圓角按鈕、文字陰影按鈕效果示例
相關(guān)文章
Android中Service和Activity相互通信示例代碼
在android中Activity負(fù)責(zé)前臺界面展示,service負(fù)責(zé)后臺的需要長期運(yùn)行的任務(wù)。下面這篇文章主要給大家介紹了關(guān)于Android中Service和Activity相互通信的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09
Android?動態(tài)加載?so實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了Android?動態(tài)加載?so實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Android RecyclerView的刷新分頁的實(shí)現(xiàn)
這篇文章主要介紹了Android RecyclerView的刷新分頁的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
Android實(shí)現(xiàn)帶有刪除按鈕的EditText示例代碼
本文給大家介紹一個很實(shí)用的小控件,就是在Android系統(tǒng)的輸入框右邊加入一個小圖標(biāo),點(diǎn)擊小圖標(biāo)可以清除輸入框里面的內(nèi)容,IOS上面直接設(shè)置某個屬性就可以實(shí)現(xiàn)這一功能,但是Android原生EditText不具備此功能,所以要想實(shí)現(xiàn)這一功能我們需要重寫EditText。下面來看看吧。2016-12-12
Android自定義View實(shí)現(xiàn)地鐵顯示牌效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)地鐵顯示牌效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11
Android編程實(shí)現(xiàn)仿易信精美彈出框效果【附demo源碼下載】
這篇文章主要介紹了Android編程實(shí)現(xiàn)仿易信精美彈出框效果,涉及Android窗口及動畫操作相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-01-01

