美文网首页叶子自律成长营
所有的大道理都是建立在努力和奋斗的基础上

所有的大道理都是建立在努力和奋斗的基础上

作者: Eren丶耶格尔 | 来源:发表于2019-02-28 21:36 被阅读3次

日结| Day30

所有的大道理都是建立在努力和奋斗的基础上的

早起

6点50准时起床,阅读新书《摆渡人》

运动

俯卧撑:3组20个,哑铃:3组10个,深蹲:3组10个

阅读

阅读《摆渡人》

学习

《自定义控件》第七章 Shader 和 BitmapShader

Shader 在三维软件中被称为着色器,是用来给空白图形上色的。

案例:望远镜效果

示例图

原理:

先准备一张背景图,然后将背景图作为 BitmapShader,只需要在手指所在位置画一个圆,就可以将圆形部分的图像显示出来了。

代码如下所示:

public class TelescopeView extends View {

    private Paint paint;
    private Bitmap bitmap, bitmapGg;
    private int dx, dy;

    public TelescopeView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        paint = new Paint();
        bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.bg);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                dx = (int) event.getX();
                dy = (int) event.getY();
                postInvalidate();
                return true;
            case MotionEvent.ACTION_MOVE:
                dx = (int) event.getX();
                dy = (int) event.getY();
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                dx = -1;
                dy = -1;
                break;
        }
        postInvalidate();
        return super.onTouchEvent(event);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (bitmapGg == null) {
            bitmapGg = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvasBg = new Canvas(bitmapGg);
            canvasBg.drawBitmap(bitmap, null, new Rect(0, 0, getWidth(), getHeight()), paint);
        }

        if (dx != -1 && dy != -1) {
            paint.setShader(new BitmapShader(bitmapGg, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT));
            canvas.drawCircle(dx, dy, 150, paint);
        }
    }
}

这里分两步:

第一步,将图片缩放到控件大小,以完全覆盖控件,否则就会使用 BitmapShader 的填充模式。这里先新建一张空白的位图,这张位图的大小与控件的大小一样,然后对背景图进行拉伸,画到这张空白的位图上。之所以在 onDraw() 函数中创建 bitmapGg,而不在初始化代码中创建,是因为在初始化时,getWidth() 和 getHeight() 函数是获取不到值的。

第二步,在 dx、dy 都不是 -1 时(手指下按或移动时),将新建的 bitmapBg 作为 BitmapShader 设置给 paint,然后在手指所在位置画一个圆圈,把圆圈部分的图像显示出来。

相关文章

  • 所有的大道理都是建立在努力和奋斗的基础上

    日结| Day30 所有的大道理都是建立在努力和奋斗的基础上的 早起 6点50准时起床,阅读新书《摆渡人》 运动 ...

  • 天上不可能掉馅饼

    你没有那么好的运气。所有的好运都是建立在充分准备的基础上,没有努力奋斗,怎么可能有收获,现在时间如此充裕,但是你却...

  • 2018/1/27 苏州 雪

    一切的命运安排,都是建立在努力的基础上

  • 所有的可能都是建立在自己努力基础上

    不能听别人胡说,也不能被别人牵着鼻子走,带动自己的情绪,消极的情绪是会传染的,和病毒一样可怕。老是听别人说没前途没...

  • 所谓神器

    最终还是靠自己啊。所有的工具,路途,捷径,都是建立在自己努力的基础上。 知识大爆炸。学习知识的目的是什么?1只是增...

  • 平等

    所有的长久的关系都是建立在平等的基础上,所有的不平等都会是关联破裂的原因

  • 2022.7.22时代一直在变,所以你也要不断改变。

    好的运气都是建立在努力的基础上,罗翔曾说:“所有成就靠的都是艰辛的努力。” 而真正的高手都是朝着目标拼命奔...

  • 火锅英雄

    没有绝对的对于错,我们所有的价值观念都是建立在我们所接受的文化的基础上,也就是所谓的价值观,世界观。。。。。。 每...

  • 堂姐的婚姻债

    不是所有的婚姻,都是建立在平等、尊重的基础上。有些婚姻,是建立在债务之上! 我今天所讲的,不是那种缺钱而傍大款傍富...

  • 所有的努力都是奋斗出来的

    1 那年她19岁,中专毕业,带着对未来的彷徨离...

网友评论

    本文标题:所有的大道理都是建立在努力和奋斗的基础上

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