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來表示,而一個漢字