中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Android中怎么實現(xiàn)一個刮刮卡效果

本篇文章為大家展示了Android中怎么實現(xiàn)一個刮刮卡效果,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,韶關(guān)企業(yè)網(wǎng)站建設,韶關(guān)品牌網(wǎng)站建設,網(wǎng)站定制,韶關(guān)網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,韶關(guān)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

一、Xfermode

通過使用Xfermode將繪制的圖形的像素和Canvas上對應位置的像素按照一定的規(guī)則進行混合,形成新的像素,再更新到Canvas中形成最終的圖形,使用的時候都是通過Paint.setXfermode來實現(xiàn)。

二、混合模式分類

PorterDuff則是用于描述數(shù)字圖像合成的基本手法,通過組合使用Porter-Duff操作,可完成任意2D圖像的合成。

public class PorterDuff {

  // these value must match their native equivalents. See SkPorterDuff.h
  public enum Mode {
    /** [0, 0] */
    CLEAR    (0),
    /** [Sa, Sc] */
    SRC     (1),
    /** [Da, Dc] */
    DST     (2),
    /** [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] */
    SRC_OVER  (3),
    /** [Sa + (1 - Sa)*Da, Rc = Dc + (1 - Da)*Sc] */
    DST_OVER  (4),
    /** [Sa * Da, Sc * Da] */
    SRC_IN   (5),
    /** [Sa * Da, Sa * Dc] */
    DST_IN   (6),
    /** [Sa * (1 - Da), Sc * (1 - Da)] */
    SRC_OUT   (7),
    /** [Da * (1 - Sa), Dc * (1 - Sa)] */
    DST_OUT   (8),
    /** [Da, Sc * Da + (1 - Sa) * Dc] */
    SRC_ATOP  (9),
    /** [Sa, Sa * Dc + Sc * (1 - Da)] */
    DST_ATOP  (10),
    /** [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc] */
    XOR     (11),
    /** [Sa + Da - Sa*Da,
       Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)] */
    DARKEN   (12),
    /** [Sa + Da - Sa*Da,
       Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)] */
    LIGHTEN   (13),
    /** [Sa * Da, Sc * Dc] */
    MULTIPLY  (14),
    /** [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] */
    SCREEN   (15),
    /** Saturate(S + D) */
    ADD     (16),
    OVERLAY   (17);

    Mode(int nativeInt) {
      this.nativeInt = nativeInt;
    }

    /**
     * @hide
     */
    public final int nativeInt;
  }

1、SRC類,優(yōu)先顯示的是源圖片。SRC_IN處理圖片相交區(qū)域時,受到目標圖片的Alpha值影響,當我們的目標圖片為空白像素的時候,源圖片也會變成空白,簡單的來說就是用目標圖片的透明度來改變源圖片的透明度和飽和度,當目標圖片的透明度為0時,源圖片就不會顯示。SRC_OUT用我們目標圖片的透明度的補值來改變源圖片的透明度和飽和度,當目標圖片的透明度為不透明時,源圖片就不會顯示。SRC_ATOP當透明度為100%和0%時,SRC_IN和SRC_ATOP是通用的,當透明度不為上述的兩個值時,SRC_ATOP比SRC_IN源圖像的飽和度會增加,變得更亮一些。

2、DST類,優(yōu)先顯示的是目標圖片。DST_IN在相交的時候以源圖片的透明度來改變目標圖片的透明度和飽和度,當源圖片的透明度為0的時候,目標圖片完全不顯示。

3、其它的疊加效果,MULTIPLY可以把圖片的輪廓取出來,LIGHTEN變亮效果。

三、刮刮卡效果

1、效果圖

Android中怎么實現(xiàn)一個刮刮卡效果

2、實現(xiàn)思路
利用PorterDuffXfermode中的模式SRC_OUT,先繪制最終呈現(xiàn)的圖片并將圖層保存起來,然后將手指移動的軌跡渲染到畫布上,并繪制目標圖片到畫布上,最后用目標圖片的透明度的補值來改變源圖片的透明值,將最終呈現(xiàn)的圖片顯示在屏幕上。

3、代碼實例

public class GuaCardView extends View {

  private Bitmap mSrcText;
  private Bitmap mSrcBitmap;
  private Bitmap mDstBitmap;
  private Paint mPaint;
  private Path mPath;
  private float mStartX,mStartY;

  public GuaCardView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setLayerType(LAYER_TYPE_SOFTWARE,null);
    mPaint = new Paint();
    mPaint.setColor(Color.RED);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeWidth(45);
    mSrcText = BitmapFactory.decodeResource(getResources(), R.drawable.guaguaka_text1);
    mSrcBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.guaguaka);
    mDstBitmap = Bitmap.createBitmap(mSrcBitmap.getWidth(),mSrcBitmap.getHeight(), Bitmap.Config.ARGB_8888);
    mPath = new Path();
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //畫最終呈現(xiàn)的圖
    canvas.drawBitmap(mSrcText,0,0,mPaint);
    int layerId = canvas.saveLayer(0,0,getWidth(),getHeight(),null,Canvas.ALL_SAVE_FLAG);
    //把手指軌跡畫到畫布上
    Canvas c = new Canvas(mDstBitmap);
    c.drawPath(mPath,mPaint);
    //利用SRC_OUT繪制原圖
    canvas.drawBitmap(mDstBitmap,0,0,mPaint);
    mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
    canvas.drawBitmap(mSrcBitmap,0,0,mPaint);
    mPaint.setXfermode(null);
    canvas.restoreToCount(layerId);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    switch(event.getAction()){
      case MotionEvent.ACTION_DOWN:
        mPath.moveTo(event.getX(),event.getY());
        mStartX = event.getX();
        mStartY = event.getY();
        return true;
      case MotionEvent.ACTION_MOVE:
        float endX = (mStartX+event.getX())/2;
        float endY = (mStartY+event.getY())/2;
        mPath.quadTo(mStartX,mStartY,endX,endY);
        mStartX = event.getX();
        mStartY = event.getY();
        break;
      default:
        break;
    }
    postInvalidate();
    return super.onTouchEvent(event);
  }
}

以

上述內(nèi)容就是Android中怎么實現(xiàn)一個刮刮卡效果,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標題:Android中怎么實現(xiàn)一個刮刮卡效果
文章源于:http://www.rwnh.cn/article28/gopgjp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航網(wǎng)站設計、建站公司動態(tài)網(wǎng)站、品牌網(wǎng)站設計、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設
海淀区| 南宁市| 高唐县| 北票市| 平塘县| 寿宁县| 太保市| 搜索| 德令哈市| 恩施市| 延津县| 宽城| 左贡县| 新疆| 逊克县| 小金县| 丰都县| 苗栗县| 临猗县| 海城市| 万宁市| 岑巩县| 高要市| 肇东市| 扎赉特旗| 静海县| 堆龙德庆县| 玉门市| 青岛市| 招远市| 元朗区| 民勤县| 黎平县| 曲麻莱县| 新沂市| 霞浦县| 铅山县| 康保县| 黄石市| 北流市| 韶关市|