Android使用Canvas对象实现刮刮乐效果

在淘宝、京东等电商举办活动的时候,经常可以看到在移动客户端推出的各种刮奖活动,而这种活动也受到了很多人的喜爱。从客户端的体验来说,这种效果应该是通过网页来实现的,那么,我们使用Android的自带控件能不能实现这种刮刮乐的效果呢?当然可以,本篇文章将介绍使用Canvas这个对象,如何实现“刮刮乐”的效果。

先看效果图

下面我们看一下如何使用代码实现

布局文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent" > 

  <ImageView
    android:id="@+id/after"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/a" /> 

  <ImageView
    android:id="@+id/before"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/b" /> 

</FrameLayout>

Activity代码

public class MainActivity extends Activity implements OnTouchListener { 

  private ImageView imgafter;
  private ImageView imgbefore;
  private Canvas canvas;
  private Paint paint;
  private Bitmap bitmap;
  private Bitmap before;
  private Bitmap after; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    imgafter = (ImageView) findViewById(R.id.after);
    imgbefore = (ImageView) findViewById(R.id.before); 

    // 获得图片
    after = BitmapFactory.decodeResource(getResources(), R.drawable.a);
    before = BitmapFactory.decodeResource(getResources(), R.drawable.b); 

    imgafter.setImageBitmap(after);
    imgbefore.setImageBitmap(before);
    // 创建可以修改的空白的bitmap
    bitmap = Bitmap.createBitmap(before.getWidth(), before.getHeight(),
        before.getConfig());
    imgbefore.setOnTouchListener(this);
    paint = new Paint();
    paint.setStrokeWidth(5);
    paint.setColor(Color.BLACK);
    // 创建画布
    canvas = new Canvas(bitmap);
    canvas.drawBitmap(before, new Matrix(), paint);
  } 

  @Override
  public boolean onTouch(View arg0, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_MOVE:
      int newX = (int) event.getX();
      int newY = (int) event.getY();
      // 将滑过的地方变为透明
      for (int i = -10; i < 10; i++) {
        for (int j = -10; j < 10; j++) {
          if ((i + newX) >= before.getWidth()
              || j + newY >= before.getHeight() || i + newX < 0
              || j + newY < 0) {
            return false;
          }
          bitmap.setPixel(i + newX, j + newY, Color.TRANSPARENT);
        }
      }
      imgbefore.setImageBitmap(bitmap);
      break;
    }
    return true;
  }
}

可以看到,代码很简单,几十行代码就实现了简单的“刮刮乐”的效果。

原理是这样的,一开始两张图片重叠,显示的还没有刮开的效果。

在Activity的onTouch方法中,我们对滑动事件进行监听,当用户用手指滑动屏幕的时候,我们将滑过的画布部分的颜色设置为透明,同时,把改变之后的bitmap对象设置为ImageView的背景,这样,隐藏在后面的图片就显示出来了,也就实现了刮刮乐的效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android studio实现刮刮乐的方法
  • Android实现刮刮乐示例分析
  • 基于Android自定义控件实现刮刮乐效果
(0)

相关推荐

  • Android studio实现刮刮乐的方法

    本文实例为大家分享了Android studio实现刮刮乐的具体代码,供大家参考,具体内容如下 MainActivity public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mai

  • 基于Android自定义控件实现刮刮乐效果

    只是简单的实现了效果,界面没怎么做优化,不过那都是次要的啦!!相信大家都迫不及待的想看效果图了吧, 其中主要的彩票视图类和橡皮擦类都是通过代码的方式构建视图,布局文件就一个主activity_main 上代码!! 主activity: package com.guaguale; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; imp

  • Android实现刮刮乐示例分析

    微信公众号有很多都做刮刮乐的活动,本文就实现了刮刮乐的效果,具体代码如下: 首先要做一个类似橡皮擦的东西吧,然后才能把纸上的笔迹擦除 /** * FileName: SplashActivity.java * * @desc 橡皮擦功能,类似刮刮乐效果 * @author HTP * @Date 20140311 * @version 1.00 */ public class Text_Rubbler extends TextView { private float TOUCH_TOLERANC

  • Android使用Canvas对象实现刮刮乐效果

    在淘宝.京东等电商举办活动的时候,经常可以看到在移动客户端推出的各种刮奖活动,而这种活动也受到了很多人的喜爱.从客户端的体验来说,这种效果应该是通过网页来实现的,那么,我们使用Android的自带控件能不能实现这种刮刮乐的效果呢?当然可以,本篇文章将介绍使用Canvas这个对象,如何实现"刮刮乐"的效果. 先看效果图 下面我们看一下如何使用代码实现 布局文件 <FrameLayout xmlns:android="http://schemas.android.com/a

  • Android刮刮乐效果-proterDuffXfermode的示例代码

    先看看实现的效果 这个场景主要是模拟我们有些app里面的刮刮乐中奖的效果,主要是利用Android的proterDuffXfermode这个类去实现的. proterDuffXfermode 在用Android中的Canvas进行绘图时,可以通过使用PorterDuffXfermode将所绘制的图形的像素与Canvas中对应位置的像素按照一定规则进行混合,形成新的像素值,从而更新Canvas中最终的像素颜色值,这样会创建很多有趣的效果.PorterDuffXfermode的功能十分的强大,其他的

  • Android通过自定义view实现刮刮乐效果详解

    前言 已经有两个月没有更新博客了,其实这篇文章我早在两个月前就写好了,一直保存在草稿箱里没有发布出来.原因是有一些原理性的东西还没了解清楚,最近抽时间研究了一下混合模式,终于也理解了刮刮乐是怎么实现的,所以想继续分享一下自己的一些心得,先上效果图. 效果图: 实现原理 其实刮刮乐实现原理也不算很复杂,最关键的还是需要了解Paint的混合模式.因为刮刮乐是由两个bitmap组成的,一个是源图另一个是目标图,我们需要把目标图的颜色改成灰色,在源图上面盖上了一张灰色的目标图.当手指滑动屏幕时paint

  • 微信小程序canvas实现刮刮乐效果

    本文实例为大家分享了微信小程序实现刮刮乐效果的具体代码,供大家参考,具体内容如下 效果图 设计流程 设计思路 canvas设置背景图,作为中奖图片: 在canvas上绘制刮的灰色涂层: 通过绑定的事件,清除对应区域的涂层: 最后判断涂层清除区域是否超过设置的可见百分比,如果超过则全部涂层清除,否则不清楚. 1.全局常量 获取用户传入的canvas的ID,设置的canvas的宽高,canvas涂层的颜色,清除当前坐标的半径和直径,计算当前清除的面积,全部清除百分比,canvas的面积. const

  • JavaScript canvas实现刮刮乐案例

    本文实例为大家分享了JavaScript canvas实现刮刮乐效果的具体代码,供大家参考,具体内容如下 效果图 HTML代码: <div class="ggk"> <span id="span">200元</span> <canvas id="canvas"></canvas> </div> css代码: .ggk { width: 200px; height: 100px

  • 移动端刮刮乐的实现方式(js+HTML5)

    程序员有一种惯性思维,就是看见一些会动的东西(带点科技含量的,猫啊,狗啊就算了),总要先想一遍,这玩意用代码是怎么控制的.比如电梯,路边的霓虹灯,遥控器,小孩子的玩具等,都统统被程序员"意淫"过. 有时候还会感觉程序员看世界会看的透彻一点............. 想必大家都玩过刮刮乐,下面就介绍一种刮刮乐的移动端实现方式!用到canvas 1.用HTML 5 canvas globalCompositeOperation 属性实现刮刮乐 思路: (1)首先需要一个盒子定位,确定刮刮乐

  • Android开发之自定义刮刮卡实现代码

    关于刮刮卡的实现效果不需要做太多解释,特别是在电商APP中,每当做活动的时候都会有它的身影存在,趁着美好周末,来实现下这个效果,也算是对零碎知识点的一个整合. 所涉及的知识点: 1.自定义View的一些流程 2.双缓冲绘图机制 3.Paint的绘图模式 4.触摸事件的一些流程 5.Bitmap的相关知识 实现思路: 其实非常简单,首先我们需要确定所要绘图的区域,然后对这块区域进行多层的绘图(背景层,前景层),然后去监听触摸事件,把手指触摸的区域的前景层给消除即可. 首先我们先来实现一个简单版的

随机推荐