android 自定义view实现刮刮卡效果

Android实现 刮刮乐效果 二、绘制中奖信息canvas绘制在bitmap上,所以在onMeasure ()方法中,首先初始化bitmap和canvas初始化画笔:然后我们绘制一个圆角矩形,在矩形的中间显示中奖信息:初始化显示文字的矩形框,将文字绘制在中间位置:此时运行,显示的效果为上图我们看到的直接显示中奖信息。三、绘制刮刮乐图片我们首先获得绘制的bitmap,fg_guaguaka是一张图片,大家可任意选择,同样在onDraw方法中绘制bimap。 阅读详情

感觉好久没写博客了,最近也是很烦,现在可以要好好学习,把自己的心态调整好,

今天实现一个刮刮卡效果,主要用到的知识点还是canvas和paint,Path这几个类,不熟悉的可以先把这三个中用到什么方法,熟悉下,也就是把api熟悉了,知道它是干嘛用的,


其实刮刮卡和橡皮擦的功能很像,我之前博客也写过关于android涂鸦方面的,如果那个看懂了,刮刮卡就很容易看的懂,我还是先写一个简单的涂鸦功能,

package com.simple;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
 * Created by admin on 2017/5/3.
 */
public class ScratchCardView extends View {
    private int width;
    private int height;
    private String text = "猜猜她是谁";
    private Paint paint;
    private Path path;
    private float downX,downY;
    private float tempX,tempY;
    public ScratchCardView(Context context) {
        this(context,null);
    }

    public ScratchCardView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ScratchCardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaint();
    }

    private void initPaint() {
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        paint.setTextSize(24);
        path = new Path();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        width = w;
        height = h;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(path,paint);
    }
    private void drawText(Canvas canvas) {
        Rect rect = new Rect();
        paint.getTextBounds(text, 0, text.length(), rect);
        int textWidth = rect.width();
        int textHeight = rect.height();
        float x = width/2-textWidth/2;
        float y = height/2+textHeight/2;
        paint.setColor(Color.parseColor("#9370DB"));
        canvas.drawText(text,x,y,paint);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                downX = event.getX();
                downY = event.getY();
                path.moveTo(downX,downY);
                invalidate();
                tempX = downX;
                tempY = downY;
                break;
            case MotionEvent.ACTION_MOVE:
                float moveX = event.getX();
                float moveY = event.getY();
                path.quadTo(tempX,tempY,moveX,moveY);
                invalidate();
                tempX = moveX;
                tempY = moveY;
                break;
        }
        return true;
    }
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
  <com.simple.ScratchCardView
      android:layout_width="540dp"
      android:layout_height="300dp"
      android:layout_centerInParent="true"
      android:background="@drawable/bg"
      ></com.simple.ScratchCardView>
</RelativeLayout>
效果图:


这个就是刮刮卡效果中的擦除功能,只是你给paint设置的颜色不同而已,

比如如何创建一个可绘制的空的画布canvas呢?

上面我们是在系统的canvas上去绘制一些文字的,但是要在自己创建的画布上绘制东西,怎么创建?其实很简单

 myBitmap = Bitmap.createBitmap(700,400, Bitmap.Config.ARGB_8888);
 myCanvas = new Canvas(myBitmap);

这就二行代码就可以了,然后通过系统的canvas,把这个mBitmap绘制上去就ok,比如怎么把几张图合并成一张图,就这么这么干了,下面四张图是我叫美工切的:


然后通过代码把这四张图合并成一张图入下:

package com.simple;
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.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
 * Created by admin on 2017/5/3.
 */
public class ScratchCardView extends View {
    private static final String TAG ="ScratchCardView" ;
    private int width;
    private int height;
    private String text = "猜猜她是谁";
    private Paint paint;
    private Path path;
    private float downX,downY;
    private float tempX,tempY;
    private Canvas myCanvas;
    private Bitmap myBitmap;
    private Bitmap bitmapa;
    private Bitmap bitmapb;
    private Bitmap bitmapc;
    private Bitmap bitmapd;
    public ScratchCardView(Context context) {
        this(context,null);
    }

    public ScratchCardView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ScratchCardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initBitmap();
        initPaint();
    }

    private void initBitmap() {
        bitmapa = BitmapFactory.decodeResource(getResources(),R.drawable.a);
        bitmapb = BitmapFactory.decodeResource(getResources(),R.drawable.b);
        bitmapc = BitmapFactory.decodeResource(getResources(),R.drawable.c);
        bitmapd = BitmapFactory.decodeResource(getResources(),R.drawable.d);
    }

    private void initPaint() {
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        paint.setTextSize(24);
        paint.setDither(true);
        path = new Path();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        width = w;
        height = h;
        myBitmap = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
        myCanvas = new Canvas(myBitmap);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        drawBitmap();
        drawPath();
        canvas.drawBitmap(myBitmap,0,0,null);
        super.onDraw(canvas);
    }
    private void drawPath() {
        myCanvas.drawPath(path,paint);
    }
    private void drawBitmap() {
        myCanvas.drawBitmap(bitmapa,0,0,null);
        myCanvas.drawBitmap(bitmapb,bitmapa.getWidth(),0,null);
        myCanvas.drawBitmap(bitmapc,0,bitmapa.getHeight(),null);
        myCanvas.drawBitmap(bitmapd,bitmapc.getWidth(),bitmapb.getHeight(),null);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                downX = event.getX();
                downY = event.getY();
                path.moveTo(downX,downY);
                invalidate();
                tempX = downX;
                tempY = downY;
                break;
            case MotionEvent.ACTION_MOVE:
                float moveX = event.getX();
                float moveY = event.getY();
                path.quadTo(tempX,tempY,moveX,moveY);
                invalidate();
                tempX = moveX;
                tempY = moveY;
                break;
        }
        return true;
    }
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
  <com.simple.ScratchCardView
      android:layout_width="450dp"
      android:layout_height="360dp"
      android:layout_centerInParent="true"
      ></com.simple.ScratchCardView>
</RelativeLayout>
我们看到布局文件中没有什么背景图片了,说明这是合并成的:


合并的原理其实很简单:


如果做过tv端的,对倒影会有点影响,其实就是根据这个原理做的,这也是拼图小游戏中的一个小功能。还有是不是类似明星给你在衣服上签名一样.

现在我们更进一步就是怎么在一张被盖住的图片上进行擦除,比如底层是一张图片,这图片上层有一层背景色,然后把上层的背景色擦除就可以看到下层的美女了,激动吧!

package com.simple;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
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;
/**
 * Created by admin on 2017/5/3.
 */
public class ScratchCardView extends View {
    private static final String TAG ="ScratchCardView" ;
    private int width;
    private int height;
    private String text = "猜猜她是谁";
    private Paint paint;
    private Path path;
    private float downX,downY;
    private float tempX,tempY;
    private Canvas myCanvas;
    private Bitmap myBitmap;
    private Bitmap bitmapa;
    private Bitmap bitmapb;
    private Bitmap bitmapc;
    private Bitmap bitmapd;
    private Bitmap bitmap;
    public ScratchCardView(Context context) {
        this(context,null);
    }

    public ScratchCardView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ScratchCardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initBitmap();
        initPaint();
    }
    private void initBitmap() {
        bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bg);
        bitmapa = BitmapFactory.decodeResource(getResources(),R.drawable.a);
        bitmapb = BitmapFactory.decodeResource(getResources(),R.drawable.b);
        bitmapc = BitmapFactory.decodeResource(getResources(),R.drawable.c);
        bitmapd = BitmapFactory.decodeResource(getResources(),R.drawable.d);
    }
    private void initPaint() {
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(20);
        paint.setTextSize(24);
        paint.setDither(true);
        path = new Path();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        width = w;
        height = h;
        myBitmap = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
        myCanvas = new Canvas(myBitmap);
        myCanvas.drawColor(Color.GREEN);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(bitmap,0,0,null);//底层图
        drawPath();//这个path是绘制在myvanvas画布上的
        canvas.drawBitmap(myBitmap,0,0,null);
        super.onDraw(canvas);
    }
    private void drawPath() {
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
        myCanvas.drawPath(path,paint);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                downX = event.getX();
                downY = event.getY();
                path.moveTo(downX,downY);
                invalidate();
                tempX = downX;
                tempY = downY;
                break;
            case MotionEvent.ACTION_MOVE:
                float moveX = event.getX();
                float moveY = event.getY();
                path.quadTo(tempX,tempY,moveX,moveY);
                invalidate();
                tempX = moveX;
                tempY = moveY;
                break;
        }
        return true;
    }
}
效果图:


这看起来是不是离呱呱卡效果近了,其实完全可以做一个最简单的刮刮卡,就是把文字和低层图片放在一起,

我现在的底图是:


上面的代码一点都没动,然后效果是这样的:


这样做很low,而且实际效果也不好,但却是一种实现方案.能实现这个效果最关键的一点是paint中的一个方法:

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));

这是设置了paint的图形混合模式,这个PorterDuff.Mode的类中有很多个变量,大概十几种吧,具体每个什么意思,最好是自己写demo去体会,光记住是没用的.

DST_OUT:只在源图像和目标图像不相交的地方绘制目标图像,在相交的地方根据源图像的alpha进行过滤,源图像完全不透明则完全过滤,完全透明则不过滤

我们这个paint画笔是作用于Path上的,path是我们要绘制的目标图像,下面的底图是源图像,

在这里我画个图更好理解了:


这样刮刮卡我们只要把图片去掉,换成绘制的文字就ok了,

整个代码如下:

package com.simple;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
 * Created by admin on 2017/5/3.
 */
public class ScratchCardView extends View {
    private static final String TAG ="ScratchCardView" ;
    private int width;
    private int height;
    private String text = "苍老师晚上约你";
    private Paint textPaint;
    private Paint paint;
    private Path path;
    private float downX,downY;
    private float tempX,tempY;
    private Canvas myCanvas;
    private Bitmap myBitmap;
    public ScratchCardView(Context context) {
        this(context,null);
    }

    public ScratchCardView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ScratchCardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaint();
    }
    private void initPaint() {
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(6);
        paint.setTextSize(24);
        paint.setDither(true);
        textPaint = new Paint();
        textPaint.setAntiAlias(true);
        textPaint.setStyle(Paint.Style.FILL);
        textPaint.setStrokeWidth(20);
        textPaint.setTextSize(24);
        textPaint.setDither(true);
        textPaint.setColor(Color.BLACK);
        path = new Path();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        width = w;
        height = h;
        myBitmap = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
        myCanvas = new Canvas(myBitmap);
        myCanvas.drawColor(Color.GREEN);
    }
    @Override
    protected void onDraw(Canvas canvas) {
//        canvas.drawBitmap(bitmap,0,0,null);//底层图
        drawText(canvas);
        drawPath();//这个path是绘制在myvanvas画布上的
        canvas.drawBitmap(myBitmap,0,0,null);
        super.onDraw(canvas);
    }

    private void drawText(Canvas canvas) {
        Rect rect = new Rect();
        textPaint.getTextBounds(text, 0, text.length(), rect);
        int textWidth = rect.width();
        int textHeight = rect.height();
        float x = width/2-textWidth/2;
        float y = height/2+textHeight/2;
        canvas.drawText(text,x,y,textPaint);
    }
    private void drawPath() {
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
        myCanvas.drawPath(path,paint);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                downX = event.getX();
                downY = event.getY();
                path.moveTo(downX,downY);
                invalidate();
                tempX = downX;
                tempY = downY;
                break;
            case MotionEvent.ACTION_MOVE:
                float moveX = event.getX();
                float moveY = event.getY();
                path.quadTo(tempX,tempY,moveX,moveY);
                invalidate();
                tempX = moveX;
                tempY = moveY;
                break;
        }
        return true;
    }
}
效果:


github:https://github.com/zhouguizhi/scratchcard

Android实现刮刮乐效果 (附完整源码) Android实现刮刮乐效果 (附完整源码) 阅读详情

相关推荐

android刮刮卡效果实现

android刮刮卡效果实现Demo,包含圆形图片的实现

【自定义控件】Android仿刮刮乐|刮刮卡|橡皮擦效果

背景:需要实线一个类似刮刮乐的擦一擦效果,要求是在图片上覆盖半透明蒙层,蒙层支持手势擦除(类似橡皮擦)。 思路:使用自定义View在onDraw时进行绘制,绘制模式选择混合模式(叠加变透明)。

qq912098812的博客 1274

Android 刮刮乐效果

Android 刮刮乐效果,开发环境:Android studio 3.1.3 博客地址:https://blog.youkuaiyun.com/huangliniqng/article/details/80722972

Android仿IOS回弹效果 ScrollView回弹 总结

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。欢迎大家一起交流讨论啊~《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。[外链图片转存中…(img-Rrr6Ipcu-1713229324955)]欢迎大家一起交流讨论啊~

2401_84132617的博客 480

android实战 刮刮卡(android studio源程序工程)

包括Android 移动开发基础案例教程课本中第十章实战演练——刮刮卡的源代码,可用Android studio运行,适合初学者学习。

MATLAB图像去噪实战:如何用巴特沃斯滤波器完美去除横条纹(附完整代码)

本文详细介绍了如何使用MATLAB中的巴特沃斯滤波器有效去除图像中的横条纹噪声。通过频域分析和滤波处理,结合完整的代码示例,帮助读者掌握从噪声分析到参数优化的全流程技术,实现高质量的图像去噪效果。

weixin_30566063的博客 562

Android实现 刮刮乐效果(2)

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。canvas绘制在bitmap上,所以在onMeasure ()方法中,首先初始化bitmap和canvas。最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,我们首先获得绘制的bitmap,fg_guaguaka是一张图片,大家可任意选择,此时运行,显示的效果为上图我们看到的直接显示中奖信息。

2401_84121603的博客 325

从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图)

最近想实现AVM拼接,看了不少博客和论文,不过比较愚钝,一直没能很好理解原理,尤其是怎么在实现时把下文中Z1和Z2消除的,所以严谨的推导了一下对应的公式,如有不对,水平有限,烦请指出~IPM变换(逆透视变换),顾名思义,即将正常透视效应消除的变换,变换结果为鸟瞰图BEV(俯视图);AVM环视拼接一般是将车身前后左右的四个鱼眼相机拼接成环视图(也是俯视),其使用的单应矩阵将四个相机转到同一个俯视坐标系。

mxdsdo09的博客 4172

安卓自定义view实现彩票刮刮卡效果

欢迎来到亮亮的博客我是一名在校大学生,目前学的是软件,今天我的个人微博也算是开通了,那么我要说的第一个就是我自己研究的安卓,在看自定义view这块时,我特意去找了几位大神的博客看了下,有一位是专门研究底层代码的,也就是api,他把安卓的系统组件源码全都挖出来了,这是他的博客地址:http://blog.youkuaiyun.com/yanbober/article/details/46128379 。对代码比较

qq_27607229的博客 618

使用 R 的长短期记忆 (LSTM)

在 R 中实现 LSTM 网络涉及使用 TensorFlow 和 Keras 软件包,它们为构建和训练深度学习模型提供了一个用户友好的界面。这些步骤包括准备数据、定义 LSTM 架构、编译模型、在数据上训练模型、评估其性能以及进行预测。与传统的 RNN 不同,LSTM 网络由于其独特的架构,可以在长序列上维护信息。与传统的 RNN 不同,LSTM 网络由于其独特的架构,可以在长序列上维护信息。为了在 R 中实现 LSTM 网络,我们将使用 Keras 库,该库为构建和训练神经网络提供了高级接口。

jianqimingtian的博客 1582

Homebrew高效升级与国内镜像源配置全攻略

本文详细介绍了如何通过配置国内镜像源(如清华、中科大、阿里云)来高效升级Homebrew,解决国内开发者访问GitHub仓库速度慢的问题。文章提供了从基础配置到永久生效的完整教程,包括常见问题解决和进阶技巧,帮助开发者大幅提升软件包管理效率。

weixin_28835551的博客 416

Android 自定义View 实现刮刮卡效果

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

打渔还是晒网 —— stone 1997

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

Android自定义View--刮刮卡效果

我最近悟出了一个道理:“学习感觉时间过的很慢,玩游戏感觉时间过的很快,因为学习让我度日如年啊!想要活的长的话要多学习··· 不光如此,学习还治好了我的失眠症,我看书一会就瞌睡了。” 所以:学习是个好东西。 按照惯例先上效果 ...

yanwenyuan0304的专栏 353

【TC3xx芯片】TC3xx DMA模块详解

TC3xx DMA模块详解

qq_36056498的博客 5917

MoCap 动作捕捉开源库教程

数据通过 tf2 和支持不同 QoS 设置的 /poses 主题直接发布。该软件包最初是为 Crazyswarm 开发的,用于跟踪多达 50 个飞行机器人。

机器人控制与仿真应用 1307

Android 实现刮刮卡效果

因为项目需求一个刮刮卡效果的抽奖页面,然后就自己写一个刮刮卡效果的自定义view,基本可以满足产品的需求吧,正好周末,就把这个干货分享给大家,主要是通过Paint和Canvas来实现,喜欢的小伙帮们,可以看下。 上效果图: 原理:自定义的View是继承TextView的,所以文字和背景图片我们可以直接设置,刮奖区这个图片是通过Canvas画上去的,手指移动刮开是通过Paint来实现的。然后每次刮完

熊大巍搬砖记 954

Transformer实战(5)——Hugging Face环境配置与应用详解

本文详细介绍 Transformer 模型的实践应用全流程。首先讲解基于 Anaconda 的环境配置,包括 transformers 库安装及 hf-mirror 镜像加速方案。然后以 BERT 为例,演示分词器使用、文本编码及 fill-mask 等任务实现,对比 PyTorch/TensorFlow 框架差异。接着展示 Hugging Face 社区模型应用,包括 GPT-2 文本生成和零样本分类。最后扩展至多模态领域,使用 CLIP 模型实现零样本图像分类。

盼小辉丶的博客 1万+

Android 自定义view《八》 橡皮擦效果实现刮刮卡效果实现 Colorfilter、setXfermode,Shader,bitmapShader,PorterDuffXfermod

一.ColorMatrix Android中的色彩矩阵 色彩矩阵对于色彩的存储,Bitmap类使用一个32位的数值来保存。红、绿、蓝及透明度各占8位,每一个色彩分量的取值范围是0-255。透明度为0表示完全透明,为255时,色彩完全可见。 使用方法:paint的函数 paint.setColorFilter(new ColorMatrixColorFilter(mSaturationMa...

深南大盗的博客 539

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android 自定义View之PorterDuffXfermode的使用(刮刮卡的效果实现)

回想一下,在刮奖的时候的那个效果,怎么实现的呢,我们来看一下简单的实现方法。 这里我们要用到画笔特效处理中的PorterDuffXfermode来实现这个效果。在学习PorterDuffXfermode之前,先看看看这张图: 图来自API demo。基本上讲PorterDuffXfermode的文章都引用了该图,类似于取并集,交集的概念。 它控制了两个图像之间的混合现实模式。注意:Porter

Hedong的博客 902

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

自定义View2 刮刮卡效果

效果如下图: 这里需要用到上一节中PorterDuffXfermode(把传递改头换面的服务员) xfermode 内容请参考http://note.youdao.com/share/?id=3f61125240ed4553df90532d42192ccb&type=note 刮刮需要用到的是Xor的效果。 刮刮卡的自定义view public cla

heinika的专栏 630

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

首先我们需要知道任何的控件在Android的布局中外层都是一个矩形的,A代表刮刮卡绘制区域,B代表中奖信息绘制区域,所以在这里我们绘制文本信息的起始点应该是A布局宽的一半减去B布局宽的一半,同理,高也应该是A布局高的一半减去B布局高的一半,这里我们把B布局,也就是文字控件的大小信息用一个Rect对象来存储,而这里的A布局即为Bitmap背景图的大小。其实非常简单,首先我们需要确定所要绘图的区域,然后对这块区域进行多层的绘图(背景层,前景层),然后去监听触摸事件,把手指触摸的区域的前景层给消除即可。...

wuxiaopengnihao1的博客 736

自定义View--刮刮卡

效果图: 原理:最上层是一个(颜色值为#cococo)bitmap,中间是一个画笔在画布上花下用户滑动的路径,最下层是一个背景图片的bitmap(见下图) 具体绘制的代码如下: @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(mOutterBitmap, 0, 0, null);//

android程序猿HJ的博客 3465

自定义view刮刮卡效果

要实现这种效果,必须要知道这样一个类 PorterDuffXfermode,设置两张图片重叠的效果 他有以下过滤模式:(SRC:ImageView 的src ;DST:ImageView的Background) android.graphics.PorterDuff.Mode. SRC :只绘制源图像 android.graphics.PorterDuff.Mode. DST 

lei的博客 551

自定义的刮刮卡view,使用了画笔的PorterDuffXfermode属性

/** * 画笔paint的属性PorterDuffXfermode使用 * 这里自定义了一个刮刮卡效果的view * <p> * PorterDuffXfermode 是设置两个图层交集的地方的显示方式, * des是先画的图层,src是后画的图层。 */ public class PaintXfermodeView extends android.support.v7...

hpp_1225的博客 156
上一篇: 求任意整数的阶乘
下一篇: android 6.0权限申请机制
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值