最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)單實(shí)現(xiàn)Android刮刮卡效果

 更新時(shí)間:2017年07月23日 17:08:14   作者:chenshun310  
這篇文章主要教大家如何簡(jiǎn)單的實(shí)現(xiàn)Android刮刮卡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android仿刮刮卡效果展示的具體代碼,供大家參考,具體內(nèi)容如下

一、Xfermode

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

二、混合模式分類

PorterDuff則是用于描述數(shù)字圖像合成的基本手法,通過(guò)組合使用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ū)域時(shí),受到目標(biāo)圖片的Alpha值影響,當(dāng)我們的目標(biāo)圖片為空白像素的時(shí)候,源圖片也會(huì)變成空白,簡(jiǎn)單的來(lái)說(shuō)就是用目標(biāo)圖片的透明度來(lái)改變?cè)磮D片的透明度和飽和度,當(dāng)目標(biāo)圖片的透明度為0時(shí),源圖片就不會(huì)顯示。SRC_OUT用我們目標(biāo)圖片的透明度的補(bǔ)值來(lái)改變?cè)磮D片的透明度和飽和度,當(dāng)目標(biāo)圖片的透明度為不透明時(shí),源圖片就不會(huì)顯示。SRC_ATOP當(dāng)透明度為100%和0%時(shí),SRC_IN和SRC_ATOP是通用的,當(dāng)透明度不為上述的兩個(gè)值時(shí),SRC_ATOP比SRC_IN源圖像的飽和度會(huì)增加,變得更亮一些。

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

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

三、刮刮卡效果

1、效果圖

這里寫(xiě)圖片描述

2、實(shí)現(xiàn)思路
利用PorterDuffXfermode中的模式SRC_OUT,先繪制最終呈現(xiàn)的圖片并將圖層保存起來(lái),然后將手指移動(dòng)的軌跡渲染到畫(huà)布上,并繪制目標(biāo)圖片到畫(huà)布上,最后用目標(biāo)圖片的透明度的補(bǔ)值來(lái)改變?cè)磮D片的透明值,將最終呈現(xiàn)的圖片顯示在屏幕上。

3、代碼實(shí)例

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);
    //畫(huà)最終呈現(xiàn)的圖
    canvas.drawBitmap(mSrcText,0,0,mPaint);
    int layerId = canvas.saveLayer(0,0,getWidth(),getHeight(),null,Canvas.ALL_SAVE_FLAG);
    //把手指軌跡畫(huà)到畫(huà)布上
    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);
  }
}

以

上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android利用ShaderMask實(shí)現(xiàn)花里胡哨的文字特效

    Android利用ShaderMask實(shí)現(xiàn)花里胡哨的文字特效

    我們的?App?大部分時(shí)候的文字都是一種顏色,實(shí)際上,文字的顏色也可以多姿多彩。我們今天就來(lái)介紹一個(gè)能夠輕松實(shí)現(xiàn)文字漸變色的組件?——?ShaderMask,感興趣的可以了解一下
    2022-12-12
  • Android實(shí)現(xiàn)靜態(tài)廣播監(jiān)聽(tīng)器的方法

    Android實(shí)現(xiàn)靜態(tài)廣播監(jiān)聽(tīng)器的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)靜態(tài)廣播監(jiān)聽(tīng)器的方法,涉及Android的廣播機(jī)制與記錄監(jiān)聽(tīng)廣播信息的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Android使用BroadcastReceiver監(jiān)聽(tīng)網(wǎng)絡(luò)連接狀態(tài)的改變

    Android使用BroadcastReceiver監(jiān)聽(tīng)網(wǎng)絡(luò)連接狀態(tài)的改變

    這篇文章主要為大家詳細(xì)介紹了Android使用BroadcastReceiver監(jiān)聽(tīng)網(wǎng)絡(luò)連接狀態(tài)的改變,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android Retrofit實(shí)現(xiàn)多圖片/文件、圖文上傳功能

    Android Retrofit實(shí)現(xiàn)多圖片/文件、圖文上傳功能

    Retrofit是Square開(kāi)發(fā)的一個(gè)Android和Java的REST客戶端庫(kù)。這個(gè)庫(kù)非常簡(jiǎn)單并且具有很多特性,相比其他的網(wǎng)絡(luò)庫(kù),更容易讓初學(xué)者快速掌握
    2017-03-03
  • Android普通對(duì)話框用法實(shí)例分析

    Android普通對(duì)話框用法實(shí)例分析

    這篇文章主要介紹了Android普通對(duì)話框用法,以實(shí)例形式較為詳細(xì)的分析了Android對(duì)話框的創(chuàng)建技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Android中Viewpager禁止滑動(dòng)的實(shí)現(xiàn)

    Android中Viewpager禁止滑動(dòng)的實(shí)現(xiàn)

    有時(shí)候在開(kāi)發(fā)中會(huì)遇到一些特別的要求,如在ViewPager中嵌入ListView,或者再嵌入一個(gè)ViewPager,那么在滑動(dòng)的時(shí)候就會(huì)造成被嵌入的XXView不能滑動(dòng)了,那么就把最外層的ViewPager禁止滑動(dòng)吧,本文就介紹了Android中Viewpager禁止滑動(dòng)的實(shí)現(xiàn)方法,需要的朋友可以參考。
    2017-05-05
  • Android入門(mén)之ProgressBar的使用教程

    Android入門(mén)之ProgressBar的使用教程

    Android里的ProgressBar默認(rèn)為一個(gè)不斷轉(zhuǎn)圈的圓,它也可以自定義。這篇文章主要通過(guò)示例和大家介紹下ProgressBar的使用,感興趣的可以了解一下
    2022-11-11
  • android使用ItemDecoration給RecyclerView 添加水印

    android使用ItemDecoration給RecyclerView 添加水印

    本篇文章主要介紹了android使用ItemDecoration給RecyclerView 添加水印,介紹了自定義Drawable來(lái)完成水印圖片和使用ItemDecoration來(lái)布局水印,有興趣的可以了解一下。
    2017-02-02
  • RecyclerView索引溢出異常的解決方法

    RecyclerView索引溢出異常的解決方法

    本篇文章主要介紹了RecyclerView索引溢出異常的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Android實(shí)現(xiàn)圖片選擇上傳功能實(shí)例

    Android實(shí)現(xiàn)圖片選擇上傳功能實(shí)例

    這篇文章主要介紹了Android實(shí)現(xiàn)圖片選擇以及圖片上傳的功能,有需要的朋友跟著學(xué)習(xí)下吧。
    2017-12-12

最新評(píng)論

老河口市| 桐梓县| 桂阳县| 福建省| 曲周县| 金堂县| 涿鹿县| 渭源县| 定边县| 吴旗县| 蓝山县| 盘山县| 且末县| 临清市| 石渠县| 金华市| 六安市| 绥江县| 奈曼旗| 文昌市| 旬邑县| 承德县| 余江县| 安仁县| 铜川市| 河津市| 临猗县| 平湖市| 印江| 柳河县| 武宁县| 仙桃市| 涪陵区| 泽普县| 灌阳县| 曲麻莱县| 黔东| 楚雄市| 太康县| 南平市| 南投县|