1. 程式人生 > >Android刮獎效果

Android刮獎效果

背景知識


使用Xfermode中的PorterDuffXfermode實現我們的刮獎效果
PorterDuffXfermode 這是一個非常強大的轉換模式,使用它,可以使用影象合成的16條Porter-Duff規則的任意一條來控制Paint如何與已有的Canvas影象進行互動。
我們來看下官方的效果圖
這裡寫圖片描述
這裡就不一一講述了,我們採用的是DcIn的模式–在源圖和目標圖相交的地方畫目標影象

程式碼實現

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import
android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import
android.view.WindowManager; /** * 紅包效果 * * @author tonywang */ public class RedPacketView extends View { private int mScaleTouchSlop; //紅包內容圖片 private Bitmap mFgBitmap; //紅包遮擋物圖片 private Bitmap mBgBitmap; //刮紅包路徑 private Path mPath; //用於來遮擋物圖片和手指路徑相交效果的canvas private Canvas mCanvas; //之前的x座標
private float preX; //之前的y座標 private float preY; //採用Xfermode的paint private Paint mPaint; public RedPacketView(Context context) { super(context); init(context); } public RedPacketView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { //獲得系統的最小有效滑動距離,習慣上採用2倍距離 ViewConfiguration viewConfiguration = ViewConfiguration.get(context); mScaleTouchSlop = 2 * viewConfiguration.getScaledTouchSlop(); WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); int screenW = wm.getDefaultDisplay().getWidth(); int screenH = wm.getDefaultDisplay().getHeight(); mPath = new Path(); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); mPaint.setARGB(128, 25, 0, 0); //這裡就是設定PorterDuffXfermode,模式指定為DST_IN mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); mPaint.setStyle(Paint.Style.STROKE); //為了效果更貼近手指滑動,設定連線處為圓形 mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); //寬度為50 mPaint.setStrokeWidth(50); // 生成前景圖Bitmap mFgBitmap = Bitmap.createBitmap(screenW, screenH, Bitmap.Config.ARGB_8888); // 將其注入畫布 mCanvas = new Canvas(mFgBitmap); // 繪製畫布背景為中性灰,這個也是我們的源圖 mCanvas.drawColor(0xFF808080); // 獲取背景底圖Bitmap mBgBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.prize_none); // 縮放背景底圖Bitmap至螢幕大小 mBgBitmap = Bitmap.createScaledBitmap(mBgBitmap, screenW, screenH, true); } @Override protected void onDraw(Canvas canvas) { //繪製背景 canvas.drawBitmap(mBgBitmap, 0, 0, null); //繪製前景 canvas.drawBitmap(mFgBitmap, 0, 0, null); //畫路徑,繪製目標圖 mCanvas.drawPath(mPath, mPaint); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mPath.reset(); mPath.moveTo(x, y); preX = x; preY = y; break; case MotionEvent.ACTION_MOVE: float dx = Math.abs(x - preX); float dy = Math.abs(y - preY); if (dx > mScaleTouchSlop || dy > mScaleTouchSlop) { mPath.quadTo(preX, preY, (x + preX) / 2, (y + preY) / 2); preX = x; preY = y; } break; } //千萬注意加上invalidate,使view重繪 invalidate(); return true; } }

100多行程式碼就能完成這個刮獎動畫
xml就不介紹了,只要在一個ViewGroup里加入控制元件就好了

來看看效果

這裡寫圖片描述

如果你想把他用到你的專案中,還需要對path的寬度做一個適配

git地址:https://github.com/TonyW92/android-redPacketView

相關推薦

Android效果

背景知識 使用Xfermode中的PorterDuffXfermode實現我們的刮獎效果 PorterDuffXfermode 這是一個非常強大的轉換模式,使用它,可以使用影象合成的16條Porter-Duff規則的任意一條來控制Paint如何與已

ScratchView:一步步打造萬能的 Android 效果控制元件

前言 我身邊有一部分開發的小夥伴,存在著這樣一種習慣。某一天,突然看到某一款 App 上有個很漂亮的自定義控制元件(動畫)效果,就會絞盡腦子想辦法去自己實現一發。當然,我自己也是屬於這型別的騷年,看到某種效果就會手癢難耐琢磨著實現套路。個人覺得這是一種需求驅動進步

Android彩票效果

實現分析: 1.底部一張圖片 2.圖片頭部是一個矩形遮擋圖片 3.通過滑動監聽,讓矩形缺失,露出底部圖片 主要程式碼如下: private RectF rectf; private Bitmap bitmap = BitmapFactory.de

通過效果來學習

一 、前言 一直在做PC端的前端開發,從網際網路到行業軟體。最近發現移動端已經成為前端必備技能了,真是不能停止學習。HTML5新增的一些東西,canvas是用的比較多也比較複雜的一個,簡單的入門了一下,通過一個刮獎效果來學習。 二、canvas基礎 本文的目標是做一

HTML5模仿效果-頁面塗抹消失外掛wScratch

前言 HTML5的canvas有很多應用點,如繪畫板、圖形繪製、遊戲互動、彩票刮刮樂等,除了這些,還有個比較好的點就是主頁塗抹一部分之後,頁面消失進入主要內容。 wScratch是一個模擬刮刮卡的jQuery外掛,可以設定刮開純色或者影象。 演示

HTML5 Canvas實戰之效果

近年來由於移動裝置對HTML5的較好支援,經常有活動用刮獎的效果,最近也在看H5方面的內容,就自己實現了一個,現分享出來跟大家交流。 1、效果 2、原理 原理很簡單,就是在刮獎區新增兩個canvas,第一個canvas用於顯示刮開後顯示的內容,可以是一張圖片或一個字串,第二個canvas用於顯示塗層

HTML5實現效果

要實現刮獎效果,最重要的是要找到一種方法:當刮開上層的塗層是就能看到下層的結果。而HTML5的canvas API中有一個屬性globalCompositeOperation,這個屬性有多個值,而實現刮獎效果要用到的值就是destination-out。意思就是:在已有內

JavaScript效果(jquery圖片外掛)

原文出處:http://www.codefans.net/jscss/code/4593.shtmljquery.scratchie.js圖片刮獎外掛例項演示程式碼,可實現類似刮獎的效果,刮刮樂中的基本效果。引用了google的API,jquery版本1.4.4,需要幾張圖

Android 自己定義控件實現效果 真的就僅僅是卡麽

pat 微信 protect 有一點 高仿 記錄 ren bounds size 轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:【張鴻洋的博客】非常久以前也過一個htm

樂實現android效果

// 等面積點陣圖 topBitmap = Bitmap.createBitmap(1000, 800, Bitmap.Config.ARGB_8888); Resources res = getResources(); // 將塗層點陣圖載入到塗層畫板 topCanvas = new Can

jQuery彩票兌效果

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="ht

Android實現效果

    今天看到一個關於刮刮卡的庫,經過測試,感覺還不錯,使用方法也比較簡單,在這裡分享一下。        1.xml佈局:<?xml version="1.0" encoding="utf-8

Android Vibrator震動效果

can cnblogs () 否則 指定 pan log 需要 動效 android震動器:Vibrator Android手機中的震動由Vibrator實現。 Vibrator vibrator = (Vibrator) getSystemService(VIBRATO

Android 仿 窗簾效果 和 登錄界面拖動效果 (Scroller類的應用) 附 2個DEMO及源代碼

@override 宋體 off down != 過程 事件 學習 border 在android學習中,動作交互是軟件中重要的一部分。當中的Scroller就是提供了拖動效果的類,在網上。比方說一些Launcher實現滑屏都能夠通過這個類去實現。以下要說的

canvas實現效果

move 技術 flag blog tex 保留 ast rec 效果 <canvas id="myCanvas" width=300 height=300></canvas> JavaScript代碼: var canvas = doc

android 水波紋效果實現

drawable color utf true odi lec .com enc orm 1.在drawable文件下,新建seletor,作為button的背景,這裏我用的是兩個圓角的shape <?xml version="1.0" encoding="utf-

Android時間軸效果,直接使用在你的項目中

Coding return pro 查詢 gpo ava person turn rst 近期開發app搞到歷史查詢,受騰訊qq的啟示,搞一個具有時間軸效果的ui

canvas實現效果

分享圖片 tlist global site class height fill color overflow canvas實現刮刮卡效果 實現步驟: 設置頁面背景圖,即刮刮卡底部圖片 繪制canvas 刮刮卡頂部圖片drawImage 綁定事件 addEventList

1689熊貓彩票增加視頻版本(PC+手機端、帶有視頻動畫開效果) ——含手機端、前後臺帶極速彩

nta 新版 最新版 環境 網頁 mysq 編程 效果 手機 2018最新版彩票現金盤,新增pc端+手機端視頻動畫運行環境:php5.2+mysql源碼類別:兩面盤界面語言:繁體中文源碼授權:無加密文件及認證授權,永久性可直接使用。版本支持:PC/WAP網頁版編程語言:PH

Android點陣屏效果的控制元件

最近發現了一個比較好玩的效果,android實現的LED點陣螢幕效果,挺有意思的,於是花了點時間實現了一下,這個用在演唱會上的粉絲當成牌子舉是不是挺好的呢,或者是送給妹子?哈哈~ 實現思路比較簡單,主要是計算漢字對應的點陣矩陣,漢字通過GB2312編碼,每個漢字對用兩個byte來表示,而一個漢字