iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android App中实现简单的刮刮卡抽奖效果的实例详解
  • 605
分享到

Android App中实现简单的刮刮卡抽奖效果的实例详解

刮刮卡appAndroid 2022-06-06 08:06:47 605人浏览 八月长安
摘要

主要思想: 将一个view设计成多层:背景层,含中奖信息等; 遮盖层,用于刮奖,使用关联一个Bitmap的canvas 在该Bitmap上,使用它的canvas.drawPat

主要思想:
将一个view设计成多层:背景层,含中奖信息等;
遮盖层,用于刮奖,使用关联一个Bitmap的canvas
在该Bitmap上,使用它的canvas.drawPath的api来处理 手势滑动(类似刮奖的动作)
使用paint.setXfermode 来进行消除手势滑动区域

2016331173620359.jpg (513×818)


public class GuaView extends View { 
  private Bitmap mBitmap; //遮盖的图层 
  private Canvas mCanvas; //绘制遮盖图层 
  private Paint mOuterPaint; 
  private Path mPath; 
  private float mLastX; 
  private float mLastY; 
  private Bitmap mCoverBitmap; //遮盖图 
  private int mWidth, mHeight; 
  private Paint mInnerPaint; 
  private String mInfo; 
  public GuaView(Context context) { 
    this(context, null); 
  } 
  public GuaView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
  } 
  private void init() { 
    mPath = new Path(); 
    mOuterPaint = new Paint(); 
    mInnerPaint = new Paint(); 
    mCoverBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.fg_guaguaka); 
    mInfo = "¥ 5 0 0"; 
  } 
  @Override 
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    mWidth = mCoverBitmap.getWidth(); 
    mHeight = mCoverBitmap.getHeight(); 
    setMeasuredDimension(mWidth, mHeight); 
    mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888); 
    mCanvas = new Canvas(mBitmap); 
    mCanvas.drawBitmap(mCoverBitmap, 0, 0, null); 
    setOuterPaint(); 
    setInnerPaint(); 
  } 
  private void setInnerPaint() { 
    mInnerPaint.setColor(Color.RED); 
    mInnerPaint.setStyle(Paint.Style.STROKE); 
    mInnerPaint.setStrokeCap(Paint.Cap.ROUND); 
    mInnerPaint.setStrokeJoin(Paint.Join.ROUND); 
    mInnerPaint.setAntiAlias(true); 
    mInnerPaint.setDither(true); //防抖 
    mInnerPaint.setStrokeWidth(5); 
    mInnerPaint.setTextSize(100); 
    mInnerPaint.setTextAlign(Paint.Align.CENTER); 
  } 
  private void setOuterPaint() { 
    mOuterPaint.setColor(Color.GREEN); 
    mOuterPaint.setStyle(Paint.Style.STROKE); 
    mOuterPaint.setStrokeCap(Paint.Cap.ROUND); 
    mOuterPaint.setStrokeJoin(Paint.Join.ROUND); 
    mOuterPaint.setAntiAlias(true); 
    mOuterPaint.setDither(true); //防抖 
    mOuterPaint.setStrokeWidth(20); 
  } 
  @Override //Path 
  public boolean onTouchEvent(MotionEvent event) { 
    float x = event.getX(); 
    float y = event.getY(); 
    switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
        mLastX = x; 
        mLastY = y; 
        mPath.moveTo(x, y); 
        break; 
      case MotionEvent.ACTION_MOVE: 
        float deltaX = Math.abs(x - mLastX); 
        float deltaY = Math.abs(y - mLastY); 
        if (deltaX > 5 || deltaY > 5) { 
          mPath.lineTo(x, y); 
        } 
        mLastX = x; 
        mLastY = y; 
        break; 
      case MotionEvent.ACTION_UP: 
        break; 
    } 
    invalidate();//调用onDraw 
    return true; 
  } 
  @Override 
  protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawColor(Color.parseColor("#bbbbbb")); //背景底色 灰色 
    canvas.drawText(mInfo, mWidth / 2, mHeight / 4 * 3, mInnerPaint); //绘制文本 
    canvas.drawBitmap(mBitmap, 0, 0, null); //绘制mBitmap  这是一个可变的bitmap,通过mCanvas绘制,首先绘制了mCoverBitmap 
    drawPath(); 
  } 
  private void drawPath() { 
    //使用该mode:dst和src相交后, 只保留dst,且除去相交的部份 
    mOuterPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); 
    mCanvas.drawPath(mPath, mOuterPaint); 
  } 
} 

Paint.Join 连续画笔衔接时:

        MITER 在外边缘以一个锐角连接         ROUND 以圆弧         BEVEL 以直线

Paint.Cap 指定对于 线和路径(lines and paths) 的开始和结束点的处理方式:

        BUTT  ends with the path  不超越它         ROUND  with the center at the end of the path 半圆         SQUARE  with the center at the end of the path 方形 您可能感兴趣的文章:Android自定义View实现QQ运动积分转盘抽奖功能Android使用surfaceView自定义抽奖大转盘Android中利用SurfaceView制作抽奖转盘的全流程攻略Android抽奖轮盘的制作方法Android打造流畅九宫格抽奖活动效果Android简单实现圆盘抽奖界面Android实现抽奖转盘实例代码jsHTML5实现手机端刮刮卡抽奖效果完美兼容android/iOSAndroid自定义View实现抽奖转盘


--结束END--

本文标题: Android App中实现简单的刮刮卡抽奖效果的实例详解

本文链接: https://www.lsjlt.com/news/25289.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中怎么实现一个刮刮卡效果
    本篇文章为大家展示了Android中怎么实现一个刮刮卡效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、Xfermode 通过使用Xfermode将绘制的图形的像素和Canvas上对应位置的像素...
    99+
    2023-05-30
    android
  • Android通过自定义view实现刮刮乐效果详解
    目录前言实现原理关键步骤创建bitmap绘制文字画路径完整代码前言 已经有两个月没有更新博客了,其实这篇文章我早在两个月前就写好了,一直保存在草稿箱里没有发布出来。原因是有一些原理性...
    99+
    2024-04-02
  • Html5如何实现移动端、PC端的刮刮卡效果
    这篇文章将为大家详细讲解有关 Html5如何实现移动端、PC端的刮刮卡效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先给大家展示下效果图:刮刮卡需求:每一位用户有三次...
    99+
    2024-04-02
  • JS实现canvas仿ps橡皮擦刮卡效果详解
    目录效果演示: 主要JS代码实现 <div class="box" id="bb"> <canvas id="cas" width="136...
    99+
    2024-04-02
  • iOS简单抽屉效果的实现方法
    本文实例为大家分享了iOS实现简单抽屉效果的具体代码,供大家参考,具体内容如下 实现思路及步骤: 1、首先准备要滑动的view #warning 第一步 - (void)addChi...
    99+
    2022-11-13
    iOS 抽屉
  • Unity实现老虎机滚动抽奖效果的示例代码
    直接看下效果图吧: 制作思路: 设计四张图片,五个点,每个图片同时向下一个点移动,到最后一个就回到0号点,以此循环。 场景搭建: 创建Image命名为Bg作为电视框背...
    99+
    2024-04-02
  • js如何实现简单的选项卡效果
    这篇文章主要介绍了js如何实现简单的选项卡效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果如下: 代码如下:<!DOC...
    99+
    2024-04-02
  • Android Build类的详解及简单实例
    Android Build类的详解及简单实例一、类结构:java.lang.Object? android.os.Build...
    99+
    2023-05-30
    android build类 roi
  • WPF实现抽屉菜单效果的示例代码
    WPF 实现抽屉菜单 框架使用大于等于.NET40;Visual Studio 2022;项目使用 MIT 开源许可协议;更多效果可以通过GitHub[1]|码云...
    99+
    2022-11-13
    WPF 抽屉菜单 WPF 菜单
  • JS实现简单的下雪特效示例详解
    目录前言主要实现代码HTML代码JS代码前言 很多南方的小伙伴可能没怎么见过或者从来没见过下雪,今天我给大家带来一个小Demo,模拟了下雪场景,首先让我们看一下运行效果 可以点击看看...
    99+
    2024-04-02
  • CSS如何实现简单的选项卡切换效果
    这篇文章将为大家详细讲解有关CSS如何实现简单的选项卡切换效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   页面布局及样式:   <divclass=&q...
    99+
    2024-04-02
  • Android Studio 接入OpenCV最简单的例子 : 实现灰度图效果
    1. 前言 上文 我们在Windows电脑上实现了人脸功能,接下来我们要把人脸识别的功能移植到Android上。 那么首先第一步,就是要创建一个Native的Android项目,并且配置好OpenGL...
    99+
    2023-09-13
    android studio opencv android 接入 灰度图效果
  • Unity实现卡片循环滚动效果的示例详解
    目录简介定义卡片的摆放规则调整卡片的层级关系调整卡片的尺寸大小动态调整位置、层级和大小移动动画按钮事件简介 功能需求如图所示,点击下一个按钮,所有卡片向右滚动,其中最后一张需要变更为...
    99+
    2022-12-09
    Unity卡片循环滚动效果 Unity循环滚动效果 Unity 滚动
  • Android实现跑马灯效果的两种简单方式
    第一种:较简单,但是局限性强,貌似只能从右至左跑,且有一个要求:字体的长度需大于控件的长度, 不然没有效果,重要的代码为深色部分,具体代码在文章最后。 重要代码的介绍 1. and...
    99+
    2024-04-02
  • Android 简单跳转页面工具的实例详解
    事情起源 activity 或者 fragment 每次跳转传值的时候,你是不是都很厌烦那种,参数传递。 那么如果数据极其多的情况下,你的代码将苦不堪言,即使在很好的设计下,也会很蛋...
    99+
    2024-04-02
  • 使用CSS3实现简单时间轴效果的案例
    这篇文章主要为大家展示了使用CSS3实现简单时间轴效果的案例,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“使用CSS3实现简单时间轴效果的案例”这篇文章吧。css是什么意思css是一种用来表现HT...
    99+
    2023-06-06
  • JavaScript模拟实现简单的MVC的示例详解
    目录场景核心思想initControllerViewModelMVC是一种常见的软件架构模式,将一个应用程序分为三个核心的部分:模型(Model)、视图(View)和控制器(Cont...
    99+
    2023-05-15
    JavaScript实现MVC JavaScript MVC
  • vue实现一个简单的分页功能实例详解
    这是一个简单的分页功能,只能够前端使用,数据不能通过后台服务器进行更改,能容已经写死了。 下面的内容我是在做一个关于婚纱项目中用到的,当时好久没用vue了,就上网区找了别人的博客来看...
    99+
    2022-12-24
    vue分页功能 vue实现一个简单的分页功能
  • Golang实现简单http服务器的示例详解
    目录一、基本描述二 、具体方法2.1 连接的建立2.2 http请求解析2.3 http请求处理2.4 http请求响应三、完整示例一、基本描述 完成一个http请求的处理和响应,主...
    99+
    2023-03-20
    Golang实现http服务器 Golang http服务器 Golang 服务器
  • 详解Python中位运算的简单实现
    目录简介应用场景案例源码简介 程序中的数在计算机内存中都是以二进制的形式存在的,位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作。 应用场景 在...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作