20190121

作者: 糖_分 | 来源:发表于2019-01-21 12:25 被阅读0次

看看这本书 -《Android游戏编程之从零开始》

Day_3_2 2019/01/21


剪切区域

概念:剪切区域也称为可视区域,设置与画布。它指的是当在画布上设置一块区域时,除此区域以外,绘制的任何内容都看不到
可视区域可以为圆形、矩形等

代码如下所示:

public class ClipSurfaceView extends SurfaceView implements SurfaceHolder.Callback
{
    private SurfaceHolder holder;
    private Canvas canvas;
    private Paint paint;
    private Bitmap bitmap = BitmapFactory.decodeResource( this.getResources() , R.mipmap.ic_launcher );
    
    public ClipSurfaceView( Context context )
    {
        super( context );
        holder = this.getHolder();
        holder.addCallback( this );
        setFocusable( true );
        paint = new Paint();
        paint.setColor( Color.WHITE );
    }
    
    @Override
    public void surfaceCreated( SurfaceHolder holder )
    {
        myDraw();
    }
    
    private void myDraw()
    {
        try
        {
            canvas = holder.lockCanvas();
            if( canvas != null )
            {
                canvas.drawColor( Color.BLACK );
                //基本方法
                canvas.save();
                canvas.clipRect( 0 , 0 , 200 , 200 );
                canvas.drawRect( 0 , 0 , this.getWidth() , this.getHeight() , paint );
                canvas.restore();
                //设置可视区域的方法1
                canvas.save();
                Path path = new Path();
                path.addCircle( 30 , 30 , 30 , Path.Direction.CCW );
                canvas.clipPath( path );
                canvas.drawBitmap( bitmap , 0 , 0 , paint );
                canvas.restore();
                //设置可视区域的方法2
                //Region表示区域的集合 可以设置多个区域块
                canvas.save();
                Region region = new Region();
                region.op( new Rect( 20 , 20 , 100 , 100 ) , Region.Op.UNION );
                //canvas.clipRegion 这个方法已经被废除,可以用clipRect,clipPath代替
                Path path1 = new Path();
                path1.addRect( new RectF( 20 , 20 , 100 , 100 ) , Path.Direction.CCW );
                canvas.clipPath( path1 );
                //或者使用
                /**
                 * 第一个第二个参数:之前裁剪的区域坐标
                 * 第二个第三个参数:当前要裁剪的区域坐标
                 * Op参数的含义:针对的对象是之前剪切的区域以及当前要剪切的区域
                 * Region.Op.DIFFERENCE         :之前剪切过除去当前要剪切的区域
                 * Region.Op.INTERSECT          :当前要剪切的区域在之前剪切过内部的部分
                 * Region.Op.UNION              :当前要剪切的区域加上之前剪切过内部的部分
                 * Region.Op.XOR                :异或,当前要剪切的区域与之前剪切过的进行异或
                 * Region.Op.REVERSE_DIFFERENCE :以当前要剪切的区域为参照物,当前要剪切的区域除去之前剪切过的区域
                 * Region.Op.REPLACE            :用当前要剪切的区域代替之前剪切过的区域
                 * 没带Op参数效果与INTERSECT的效果一样,两个区域的交集
                 */
                canvas.clipRect( 40 , 40 , 100 , 100 , Region.Op.DIFFERENCE );
            }
        }
        catch( Exception e )
        {
            e.printStackTrace();
        }
        finally
        {
            if( canvas != null )
            {
                holder.unlockCanvasAndPost( canvas );
            }
        }
    }
    
    @Override
    public void surfaceChanged(
            SurfaceHolder holder ,
            int format ,
            int width ,
            int height )
    {
        
    }
    
    @Override
    public void surfaceDestroyed( SurfaceHolder holder )
    {
        
    }
}

167/406

相关文章

  • 00021 A prosecutor's vision

    Changelog:20190121 BY:田一,占位待补。

  • 20190121

    陪伴最重要的不是“陪”而是“伴”,不能长时间陪没关系,重要的是你有没有心高质量的“伴”,哪怕是一个留言条,一封充满...

  • 20190121

    不知道这么费劲的维持有什么意思,其实除了舍不得可能就是不想让自己再那么难受了。可是这样一样让人很难受。还应该继续吗...

  • 20190121

    晚安让所有沉睡。 饿死了 困死了 哭死了 自闭了 明天我要多吃一点 好饿 怎么可以饿着自己 拒绝熬夜 从我做起

  • 20190121

    看看这本书 -《Android游戏编程之从零开始》 Day_3_2 2019/01/21 剪切区域 概念:剪切区域...

  • 20190121

    无锡镁钛铒金属制品-陆圆 【日精进打卡第162天】 【知~学习】 《六项精进》1遍 共275遍 《大学》0遍 共1...

  • 20190121

    关于成都地名的几首诗 琴台路 茂陵多病后,尚爱卓文君。 酒肆人间世,琴台日暮云。 野花留宝靥,蔓草见罗裙。 归凤求...

  • 20190121

    思想:44岁的港湾学院,正处于发展历史的十字路口,历史证明,升国家重点中专,建设高职大专,创国家骨干院校,...

  • 20190121

    20190121 暖迹o 字数 999 · 阅读 0 2019-01-21 23:55 保持日更真的好难,写了没两...

  • 20190121

    20190121 听课两节,评课的分析撰写。 中午和小女孩玩忠诚度测试的游戏。测试宠物对主人的忠诚。原来可以用分数...

网友评论

      本文标题:20190121

      本文链接:https://www.haomeiwen.com/subject/fliqjqtx.html