精华内容
下载资源
问答
  • 我在做C语言课程设计,要用line函数画个五子棋盘,可是我折腾了半天,看书上的源代码,连根线都出来 我们的书好像是基于TURBO C的,好坑。 #include "stdafx.h" #include #define SOLID_LINE 0 #define ...
  • 怎样才能画好女生身体?画好女生身体有哪些技巧?想必这些问题都是绘画初学者们比较伤脑筋的问题,那么到底怎样才能画好动漫女性身体轮廓呢?今天收集整理了关于怎么画女生身体?教你女性身体轮廓的画法! 不会画...

    怎么画女生身体?怎样才能画好女生身体?画好女生身体有哪些技巧?想必这些问题都是绘画初学者们比较伤脑筋的问题,那么到底怎样才能画好动漫女性身体轮廓呢?今天收集整理了关于怎么画女生身体?教你女性身体轮廓的画法!

    在这里插入图片描述

    不会画人体躯干的看过来,这里有超基础的人体躯干画法,而且还是附带过程图的那种,大家仔细看清楚了,有步骤讲解,不会画的赶紧学起来吧!

    1、躯干轮廓

    首先是身体的轮廓,先画出大概的体型。用一句话说身体的体型就像一张长方形的纸。请注意长度,像下面的图一样画一下。
    在这里插入图片描述

    接着画出轮廓,先画出右半身吧。
    在这里插入图片描述

    (1)肩膀到肋骨。由于我稍后添加了一只手臂,因此现在先不用考虑线条。

    (2)这里是所谓的“收缩”部分。如果收缩太多也会很奇怪,所以一定要稍微厚一点

    (3)面向转折的部分画屁股的线。要意识到腰的线周围是有骨盆的。

    接下来来画胸口。
    在这里插入图片描述

    (1)继续胸部的线,从脖子上画出来。由于它没有出现在轮廓上,所以它起到了延伸线的作用。

    (2)胸口的轮廓是有个性的(不同人不同胸),画泳衣和裸体的时候要观察。

    (3)是和肩膀的连接部分。如果没有这里的话,容易失去平衡。这里决定了肩膀的可动范围。

    接下来将介绍侧面的躯体。
    在这里插入图片描述

    (1)同样是肩膀到胸。这里是平坦的。

    (2)背从侧面看,背骨的线条会影响到轮廓。

    (3)这里要有收缩。比起从正面看的时候,将这里凹陷下去更自然。另外,也容易连接到臀部的线条。

    (4)当你从侧面看时,骨盆容易有突出来的感觉。
    在这里插入图片描述

    (5)这里加上大胸部的话,重力可以通过拖放类型来表示。

    3、手臂轮廓

    接下来手臂的轮廓。这在腿的轮廓上也可以说是共通的,但是内侧的曲线会变多。因为有差异,你可以画出出更像人类的身体。

    在这里插入图片描述

    (1)从肩膀到肘的轮廓。也可以在结束的时候加上肘的凸感。

    (2)两个手臂都这样画。如上所述因为是内侧所以用曲线画。

    (3)从肘到手腕的线。在这里认真看会有比较明显的线条。顺便在此推荐大家可以搜一下:艺学绘,里面有很多教程可以供大家参考!

    (4)从胳膊弯骨肌到手腕。在描写女性的时候,可以对比一下这里的松软感和手腕的鲜明感。

    3、腿部轮廓

    最后是脚的轮廓。

    现在的主流不太使用曲线。
    在这里插入图片描述

    (1)大腿内侧。因为是内侧,所以当然要多使用曲线。

    (2)在膝盖上的轮廓.

    (3)膝盖有点角。如果想展现真实性的话,请不要忘记这里的角张。

    (4)小腿的部分。从膝盖到脚踝,如果你可以画出那种不会不自然的消息退,会变得更漂亮。

    (5)小腿肚。女性的画起来有点肉看起来会比较自然。

    以上内容就是收集整理分享的优质教程,主要就是教大家如何绘画动漫女性身体轮廓的画法!教程超级实用,相信这个教程一定会对大家有所帮助,赶紧收藏练习吧~

    展开全文
  • 那些酷炫的深度学习网络图怎么画出来的?

    万次阅读 多人点赞 2019-05-28 15:50:07
    ‍‍‍‍‍‍‍‍‍‍‍本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具。 1NN-SVG 这工具可以非常方便的画出各种类型的图,是下面这位小哥哥开发的,来自于麻省理工学院弗兰克尔...

    ‍‍‍‍‍‍‍‍‍‍‍本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具。

     

     

    NN-SVG

    这个工具可以非常方便的画出各种类型的图,是下面这位小哥哥开发的,来自于麻省理工学院弗兰克尔生物工程实验室, 该实验室开发可视化和机器学习工具用于分析生物数据。

    640?wx_fmt=jpeg

    github地址:https://github.com/zfrenchee

    画图工具体验地址:http://alexlenail.me/NN-SVG/

    可以绘制的图包括以节点形式展示的FCNN style,这个特别适合传统的全连接神经网络的绘制。

    640?wx_fmt=png

    以平铺网络结构展示的LeNet style,用二维的方式,适合查看每一层featuremap的大小和通道数目。

    640?wx_fmt=png

    以三维block形式展现的AlexNet style,可以更加真实地展示卷积过程中高维数据的尺度的变化,目前只支持卷积层和全连接层。

    640?wx_fmt=png

    这个工具可以导出非常高清的SVG图,值得体验。

     

     

    2 PlotNeuralNet

    这个工具是萨尔大学计算机科学专业的一个学生开发的,一看就像计算机学院的嘛。

    640?wx_fmt=jpeg

    首先我们看看效果,其github链接如下,将近4000 star:

    https://github.com/HarisIqbal88/PlotNeuralNet

    看看人家这个fcn-8的可视化图,颜值奇高。

    640?wx_fmt=png

    使用的门槛相对来说就高一些了,用LaTex语言编辑,所以可以发挥的空间就大了,你看下面这个softmax层,这就是会写代码的优势了。

    640?wx_fmt=png

    其中的一部分代码是这样的,会写吗。

    \pic[shift={(0,0,0)}] at (0,0,0) {Box={name=crp1,caption=SoftmaxLoss: $E_\mathcal{S}$ ,%    

    fill={rgb:blue,1.5;red,3.5;green,3.5;white,5},opacity=0.5,height=20,width=7,depth=20}};    

     

    相似的工具还有:https://github.com/jettan/tikz_cnn

     

     

    ConvNetDraw

    ConvNetDraw是一个使用配置命令的CNN神经网络画图工具,开发者是香港的一位程序员,Cédric cbovar。

    640?wx_fmt=jpeg

    采用如下的语法直接配置网络,可以简单调整x,y,z等3个维度,github链接如下:

    https://cbovar.github.io/ConvNetDraw/

    640?wx_fmt=png

    使用方法如上图所示,只需输入模型结构中各层的参数配置。

    640?wx_fmt=png

    挺好用的不过它目标分辨率太低了,放大之后不清晰,达不到印刷的需求。

     

     

    4 Draw_Convnet

    这一个工具名叫draw_convnet,由Borealis公司的员工Gavin Weiguang Ding提供。

    640?wx_fmt=jpeg简单直接,是纯用python代码画图的,

    https://github.com/gwding/draw_convnet

    看看画的图如下,核心工具是matplotlib,图不酷炫,但是好在规规矩矩,可以严格控制,论文用挺合适的。

    640?wx_fmt=png

     

    类似的工具还有:https://github.com/yu4u/convnet-drawer

     

     

    5 Netscope

    下面要说的是这个,我最常用的,caffe的网络结构可视化工具,大名鼎鼎的netscope,由斯坦福AILab的Saumitro Dasgupta开发,找不到照片就不放了,地址如下:

    https://github.com/ethereon/netscope

    640?wx_fmt=png640?wx_fmt=png

    左边放配置文件,右边出图,非常方便进行网络参数的调整和可视化。这种方式好就好在各个网络层之间的连接非常的方便。

     

     

    其他

    再分享一个有意思的,不是画什么正经图,但是把权重都画出来了。

    http://scs.ryerson.ca/~aharley/vis/conv/

    640?wx_fmt=jpeg640?wx_fmt=png

     

    看了这么多,有人已经在偷偷笑了,上PPT呀,想要什么有什么,想怎么画就怎么画。

     

    640?wx_fmt=png
    不过妹子呢?怎么不来开发一个粉色系的可视化工具呢?类似于这样的

    640?wx_fmt=jpeg

    总结

     

    那么,你都用什么画呢?欢迎留言分享一下!

     

    欢迎关注磐创博客资源汇总站:http://docs.panchuang.net/

    欢迎关注PyTorch官方中文教程站:http://pytorch.panchuang.net/

    展开全文
  • 再差1篇就可以获得持之以恒徽章了,今天带大家画一个比较简单的view。 废话不多说,看效果图: 首先 构造函数 测量... 这里就一笔带过了。  public ErrorView(Context context) { this(context, null); } ...

    嗯。。再差1篇就可以获得持之以恒徽章了,今天带大家画一个比较简单的view。


    转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50477108

    废话不多说,看效果图:


    首先 构造函数 测量... 这里就一笔带过了。 

     public ErrorView(Context context) {
            this(context, null);
        }
    
        public ErrorView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public ErrorView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int widthSize = MeasureSpec.getSize(widthMeasureSpec);
            int widthMode = MeasureSpec.getMode(widthMeasureSpec);
            int heightSize = MeasureSpec.getSize(heightMeasureSpec);
            int heightMode = MeasureSpec.getMode(heightMeasureSpec);
            if (widthMode == MeasureSpec.EXACTLY) {
                mWidth = widthSize;
            } else {
                mWidth = 200;
            }
    
    
            if (heightMode == MeasureSpec.EXACTLY) {
                mHeight = heightSize;
            } else {
                mHeight = 200;
            }
            setMeasuredDimension(mWidth, mHeight);
        }
    如果你看不懂上面这些,翻翻我的这一篇博客,有一些补充的知识点。 圆形百分比view


    接下来draw,如果让你绘制一个静态的这个突然,你一定闭着眼也能画出来。。那么怎么才能实现动态的效果呢。。


    其实就是模仿手绘的过程,我们是一点一点画出来的,一条线的逐渐延迟。  那我们就来模仿这个自然的过程。

    首先画一个圆形。

    Paint p = new Paint();
            p.setStrokeWidth(10);
            p.setAntiAlias(true);
            p.setColor(Color.RED);
            p.setStyle(Paint.Style.STROKE);
            RectF rectF = new RectF(0 + 10, 0 + 10, mWidth - 10, mHeight - 10);
            canvas.drawArc(rectF, 180, 360 * mProgress / 100, false, p);
            mProgress+=5;

    可以看到drawArc的第三个参数 是变化的 , 其中mProgress的初值是零,这里让他自增,也就是说,每次调用onDraw方法,他就会增加。所以每次的弧都会比原来长一点点,直到最后画完。  所以在程序的最后 一定有 postInvalidateDelayed(10); 方法。


    接下来来绘制两条线,这里的坐标我直接取半径的4分之一啦,唯一注意一点就是,只有在progress大于100的时候 我们才绘制两条线,两条线段也是根据一个变量自增的,原理同上。  这里mLineOneX等参数均表示画线的时候两点的坐标。 当mLineOneX = mWidth * 0.5的时候  mWidth /4 + mLineOneX 就等于我们要画线段的最终点。



    if (mProgress > 100) {
                //画左边的线
                if (mLineOneX < mWidth * 0.5) {
                    mLineOneX+=20;
                    mLineOneY+=20;
                }
                canvas.drawLine(mWidth / 4, mHeight / 4, mWidth / 4 + mLineOneX, mHeight / 4 + mLineOneY, p);
    
    
                if (mLineOneX == mWidth * 0.5) {
                    if (mLineTwoX < mWidth * 0.5) {
                        mLineTwoX+=20;
                        mLineTwoY+=20;
                    }else {
                        //判断全部绘制完成
                        isLineDrawDone = true;
                    }
                    canvas.drawLine(mWidth / 4, (float) (mHeight * 0.75), mWidth / 4 + mLineTwoX, (float) (mHeight * 0.75) - mLineTwoY, p);
    
    
                }
    
    
            }
    之后 添加一个标记位   isLineDrawDone  判断一下 如果没有画完 则 :

     if(isLineDrawDone){
                Log.e("wing","draw done");
               
            }else{
    
                postInvalidateDelayed(10);
            }

    现在 基本上完成了绘制,  别急 还没加震动,震动效果是怎么实现的呢,大家还记得吗,如果忘了,可以看看我这篇博客: 自定义动画 实现抖一抖效果

    所以我们要写一个接口,来回调onStop

    public interface OnStopListener{
            void onStop(View v);
        }

    把最后的绘制完成完善,继续增加一个标志位,代表全部绘制完成

     if(isLineDrawDone){
                Log.e("wing","draw done");
                if(!isDrawDone) {
                    if (mOnStopListener != null) {
                        mOnStopListener.onStop(this);
                    }
                    isDrawDone = true;
                }
    
            }else{
    
                postInvalidateDelayed(10);
            }

    提供一个reset()方法 让用户可以手动控制重绘

     public void reset() {
            mProgress = 0;
            mLineOneX = 0;
            mLineOneY = 0;
            mLineTwoX = 0;
            mLineTwoY = 0;
            isLineDrawDone = false;
            isDrawDone = false;
            invalidate();
        }

    在提供一个添加监听器的方法

     public void setOnStopListener(OnStopListener onStopListener){
            mOnStopListener = onStopListener;
        }



    最后 在Activity中 为这个View添加 震动效果

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mErrorView = (ErrorView) findViewById(R.id.errorView);
    
            mErrorView.setOnStopListener(new ErrorView.OnStopListener() {
                @Override
                public void onStop(View v) {
                    ShakeAnimation sa = new ShakeAnimation();
                    sa.setDuration(1000);
                    v.startAnimation(sa);
                }
            });
    
            mErrorView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mErrorView.reset();
                }
            });

    嘿嘿嘿。。。这样就骗到了持之以恒勋章。

    源码地址:http://download.csdn.net/detail/wingichoy/9394685

    展开全文
  • 前段时间 Android L 发布了,相信...干脆一不做二不休,就重写了一个 ”MaterialButton“ 控件出来。 在这里不讨论什么是 :“Material Design” 。 在这里将给大家分享一下我自己弄的 “Material Design” 风格的 ”Ma

    原创作品,转载请注明出处:http://blog.csdn.net/qiujuer/article/details/39831451

    前段时间Android L 发布了,相信看过发布会了解过的朋友都为其中的 “Material Design” 感到由衷的惊艳吧!至少我是的。

    在惊艳之余感到由衷的遗憾,因为其必须在 ”Android L“ 上才能使用,MD,郁闷啊。
    之后便自己想弄一个点击动画试试,此念头一发不可收拾;干脆一不做二不休,就重写了一个 ”MaterialButton“ 控件出来。
    在这里不讨论什么是 :“Material Design” 。
    在这里将给大家分享一下我自己弄的 “Material Design” 风格的 ”MaterialButton“ 按钮动画实现。

    预热一下:


    上面的两张动画相信大家都看过吧?是不是挺不错的?反正我是觉得手机上有这样的动画是很爽的,比较手机是用来增加体验的。但是这些动画只能在Android L 才能体验到,对于现在国内的 Android 厂商的情况来看,估计谷歌出新的版本的时候我们就能用上这个 L 版本了。

    下面给大伙看看我做的 “MaterialButton” 按钮:


    效果还不错吧?好了开始开工了。

    介绍一下我的工具:“Android Studio” 当然大家用其他也行。

    第一步:新建项目(这个任意,自己捣鼓吧)

    第二步:新建自定义控件:在java文件夹上右击选择自定义控件:


    取个名字:“MaterialButton


    现在来看看多了一个类(MaterialButton),一个布局文件 “sample_material_button”,一个属性文件 “attrs_material_button


    到这里第二步完成了。多了3个文件。

    第三步:修改 “MaterialButton” 类:

    分为几步走:删除示例代码重新继承自 “Button” 类复写 “onTouchEvent()” 方法。完成后的代码:

    public class MaterialButton extends Button {
        public MaterialButton(Context context) {
            super(context);
            init(null, 0);
        }
    
        public MaterialButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(attrs, 0);
        }
    
        public MaterialButton(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init(attrs, defStyle);
        }
    
        private void init(AttributeSet attrs, int defStyle) {
            // Load attributes
            final TypedArray a = getContext().obtainStyledAttributes(
                    attrs, R.styleable.MaterialButton, defStyle, 0);
            a.recycle();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            return super.onTouchEvent(event);
        }
    
    }
    
    是不是感觉干净多了?到此第三步完成了。

    第四步:就是做实际的动画了,在这里需要给大家说说三个需要注意的东西:

    1.点击事件响应,这个很好理解,在 “onTouchEvent()” 方法中完成,在该方法中我们需要完成的是点击后启动一个动画,同时需要获取到当时点击的位置。

    2.动画,这里的动画不是放大动画而是属性动画,说实话 这个要说清楚还真不是一点点就能说清楚的事情。简单说就是在动画中可以控制一个属性的变化,而在这里来说就是在 “MaterialButton” 类中建立一个宽度和一个颜色的属性,然后在动画中控制这两个属性的变化。

    3.属性的建立以及属性的变化区域确定问题。

    首先建立两个属性:

        private Paint backgroundPaint;
        private float radius;
        private Property<MaterialButton, Float> mRadiusProperty = new Property<MaterialButton, Float>(Float.class, "radius") {
            @Override
            public Float get(MaterialButton object) {
                return object.radius;
            }
    
            @Override
            public void set(MaterialButton object, Float value) {
                object.radius = value;
                //刷新Canvas
                invalidate();
            }
        };
    
        private Property<MaterialButton, Integer> mBackgroundColorProperty = new Property<MaterialButton, Integer>(Integer.class, "bg_color") {
            @Override
            public Integer get(MaterialButton object) {
                return object.backgroundPaint.getColor();
            }
    
            @Override
            public void set(MaterialButton object, Integer value) {
                object.backgroundPaint.setColor(value);
            }
        };

    两个属性对比一下可以发现在半径的属性 “set” 操作中调用了 “invalidate()” 方法,该方法的作用是告诉系统刷新当前控件的 “Canvas”,也就是触发一次:“onDraw(Canvas canvas)” 方法。

    然后复写 “onTouchEvent()” 方法如下:

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                //记录坐标
                paintX = event.getX();
                paintY = event.getY();
                //启动动画
                startAnimator();
            }
            return super.onTouchEvent(event);
        }
    在该方法中,首先确定是否是点击下去的事件,然后记录坐标,并启动动画。

    在启动动画方法 “startAnimator()” 方法中,我们这样写:

        private void startAnimator() {
            
            //计算半径变化区域
            int start, end;
    
            if (getHeight() < getWidth()) {
                start = getHeight();
                end = getWidth();
            } else {
                start = getWidth();
                end = getHeight();
            }
    
            float startRadius = (start / 2 > paintY ? start - paintY : paintY) * 1.15f;
            float endRadius = (end / 2 > paintX ? end - paintX : paintX) * 0.85f;
    
            //新建动画
            AnimatorSet set = new AnimatorSet();
            //添加变化属性
            set.playTogether(
                    //半径变化
                    ObjectAnimator.ofFloat(this, mRadiusProperty, startRadius, endRadius),
                    //颜色变化 黑色到透明
                    ObjectAnimator.ofObject(this, mBackgroundColorProperty, new ArgbEvaluator(), Color.BLACK, Color.TRANSPARENT)
            );
            // 设置时间
            set.setDuration((long) (1200 / end * endRadius));
            //先快后慢
            set.setInterpolator(new DecelerateInterpolator());
            set.start();
        }

    在这一步我们需要知道有些按钮并不是横向的,所以长不一定大于宽度,所以需要先判断获取到最长与最短,然后进行计算获取到开始的半径与结束的半径,这里有一个我的思路图:


    我们知道在 Android 中都是以左上脚为圆心,然后右边为X正数,下边为Y正数。所以建立了如上坐标系。

    蓝色矩形区域代表按钮,蓝色点代表点击的点。灰色矩形代表点击后的开始区域,然后4边开始扩散开;以上就是一个简单的原理。当然思路有些跳跃,如果不懂可以在下边评论我都会进行回复的。


    第五步:画画,对就是画画;这一步就是利用上面的半径和画笔颜色进行实际的绘制。

    这里需要了解的是:

    1:画画是在:“onDraw(Canvas canvas)” 方法中完成

    2:在画板(Canvas)上是分层级的,简单说就是先画背景然后画房子,然后画人,最后画人的一些小细节 自底向上的流程

    3:画板每次画 都是新的画板,预示着你每次都需要从背景画起然后才到人;在编程中就是每次 “onDraw(Canvas canvas)” 方法中的画板(Canvas )都是新的(New)。

    说了那么多其实很简单,因为复杂的都在上一步中完成了。 “onDraw(Canvas canvas)” 源码如下:

        @Override
        protected void onDraw(Canvas canvas) {
            canvas.save();
            canvas.drawCircle(paintX, paintY, radius, backgroundPaint);
            canvas.restore();
    
            super.onDraw(canvas);
        }
    在这里我们先保存了画板的状态,然后画一个圆,然后恢复上一次的状态,然后调用父类进行后面的绘制工作。

    这里解释一下:

    1.为什么 “super.onDraw(canvas)” 需要放在最后调用?

    因为画板是分层级的,当调用 “super.onDraw(canvas)” 的时候进行的工作是绘制字体那些,如果放在前面调用那么造成的后果是我们的圆会覆盖到字体上面。所以我们需要先画圆背景。

    2.为什么只有一次画圆操作(canvas.drawCircle())?

    因为在半径属性中调用了 “invalidate()” ,当每次变化半径值的时候将进行一次 “onDraw(canvas)” 操作,也就画一次圆,在一定时间内快速重复画半径逐渐增大的圆的时候就形成了动画效果。

    最后给出这次控件的代码:

    public class MaterialButton extends Button {
        private Paint backgroundPaint;
        private float paintX, paintY, radius;
    
        public MaterialButton(Context context) {
            super(context);
            init(null, 0);
        }
    
        public MaterialButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(attrs, 0);
        }
    
        public MaterialButton(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init(attrs, defStyle);
        }
    
        private void init(AttributeSet attrs, int defStyle) {
            // Load attributes
            final TypedArray a = getContext().obtainStyledAttributes(
                    attrs, R.styleable.MaterialButton, defStyle, 0);
            a.recycle();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            canvas.save();
            canvas.drawCircle(paintX, paintY, radius, backgroundPaint);
            canvas.restore();
    
            super.onDraw(canvas);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                //记录坐标
                paintX = event.getX();
                paintY = event.getY();
                //启动动画
                startAnimator();
            }
            return super.onTouchEvent(event);
        }
    
        private void startAnimator() {
    
            //计算半径变化区域
            int start, end;
    
            if (getHeight() < getWidth()) {
                start = getHeight();
                end = getWidth();
            } else {
                start = getWidth();
                end = getHeight();
            }
    
            float startRadius = (start / 2 > paintY ? start - paintY : paintY) * 1.15f;
            float endRadius = (end / 2 > paintX ? end - paintX : paintX) * 0.85f;
    
            //新建动画
            AnimatorSet set = new AnimatorSet();
            //添加变化属性
            set.playTogether(
                    //半径变化
                    ObjectAnimator.ofFloat(this, mRadiusProperty, startRadius, endRadius),
                    //颜色变化 黑色到透明
                    ObjectAnimator.ofObject(this, mBackgroundColorProperty, new ArgbEvaluator(), Color.BLACK, Color.TRANSPARENT)
            );
            // 设置时间
            set.setDuration((long) (1200 / end * endRadius));
            //先快后慢
            set.setInterpolator(new DecelerateInterpolator());
            set.start();
        }
    
    
        private Property<MaterialButton, Float> mRadiusProperty = new Property<MaterialButton, Float>(Float.class, "radius") {
            @Override
            public Float get(MaterialButton object) {
                return object.radius;
            }
    
            @Override
            public void set(MaterialButton object, Float value) {
                object.radius = value;
                //刷新Canvas
                invalidate();
            }
        };
    
        private Property<MaterialButton, Integer> mBackgroundColorProperty = new Property<MaterialButton, Integer>(Integer.class, "bg_color") {
            @Override
            public Integer get(MaterialButton object) {
                return object.backgroundPaint.getColor();
            }
    
            @Override
            public void set(MaterialButton object, Integer value) {
                object.backgroundPaint.setColor(value);
            }
        };
    }

    当然后续的工作还有:不同的颜色的按钮按钮属性的问题

    介于大家可能没有 Android Studio 无法看到效果,特意把 Apk 上传了,如果Eclipse不知道怎么导入的话 就加我QQ,我给你说一下!

    地址:APK

    这些我都在个人的项目中完成了,大家拿去试试:

    Genius-Android


    进阶:[Material Design] MaterialButton 效果进阶 动画自动移动进行对齐效果


    展开全文
  • 只用一个脚本做一个刮刮乐,一不小心刮出来一个女朋友!【学习娱乐一下!】
  • 【杂谈】那些酷炫的深度学习网络图怎么画出来的? 本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具。 作者&编辑|言有三 1NN-SVG 这工具可以非常方便的画出各种类型的图,是...
  • 8 行代码用Python画一个中国地图

    千次阅读 2019-04-30 00:00:00
    源/ SegmentFaultJupyter首先,第神器是Jupyter。如果你是第次使用,可能搞不清楚它的开发者做这么鬼东西出来干什么,说它是博客系统也不像,说...
  • 如何用Python画一个中国地图?

    千次阅读 2018-05-24 17:50:00
    你用Java的4行代码画一个地图出来? 然后我们开始上国家,又是1行代码: m .drawcountries (linewidth= 1.5 ) 就变成了这样: 用Java可能吗?用PHP可能吗? 如果我们想显示中国地图,只需要在创建Basemap时指定...
  • Unity 使用 Spine 动画

    万次阅读 多人点赞 2018-04-02 17:34:39
    在 Unity 中,常常使用 Spine 来制作一些动画,引擎本身并不能直接播放 Spine 动画,需要额外导入一个 RunTime 插件库才能支持。 运行库导入 关于运行库的导入,有两种方式: 1. 从开源库导入 下载 Spine 的 ...
  • 如何学习绘画?手机上怎样学习绘画?学习绘画难吗?平板电脑怎么学画画?想必这些都是绘画初学者们经常在想的问题吧,就是不知道如何才能学好绘画...不过偶尔开脑洞,画个头像什么的,还是平板最方便。所以,今天...
  • altium designer 怎么才能不经过原理图直接在空白pcb上加封装然后线? 对于你的这种想法,如果是复杂点的PCB,建议还是下SCH,这样的好处就不说了,如果PCB只有几元件,那么我觉得可以用这种方法,但也要...
  • 我们先来看效果图像这样的一个带过渡效果的小部件在我们实际开发中的应用几率还是比较大的,但是在开发微信小程序的过程中可能有的小伙伴发现transition这个属性它不好使(下面说明)所以我们这个时候会考虑去使用...
  • 然后在默认生成的第一个项目发现了一个新的控件,即FloatingActionButton,联想到知乎上也有这个控件,于是模仿知乎的效果试一试。 大概分为四个步骤: Step1:修改原生FloatingActionButton的背景颜色和点击颜色。 ...
  • 本系列文章由七十一雾央编写,转载请注明出处。  http://blog.csdn.net/u011371356/article/details/9299121 作者:七十一雾央 新浪微博:...  在前几节的笔记里,大家肯定会为一个
  • echarts折线图加载后显示空白,浏览器改变大小后才能显示出来次加载失败 原因是:echarts在默认隐藏的div中显示空白,有时候图表会放在多标签页(tab)里,那些初始隐藏的标签在初始化图表的时候因为获取不到...
  • matlab编程出来一个矩形波,怎么改成锯齿波? 采集数据后出波形就是这样了。。。 这是现在运行出来的结果: 是这种矩形波,怎么样才能改把他改成锯齿波输出? 这是由于采样频率不够高吗? 求帮助啊啊啊。。 .....
  • 怎样才能画好男性的眼睛?怎么绘画出差异化?学习绘画难吗?怎样才能学好绘画?想必这些都是绘画初学者们经常在想的问题吧,就是不知道怎么绘画出不同性格的人物眼睛! 那么今天收集整理了一些关于怎么绘画男性人物...
  • 利用JAVA画一颗小心心

    千次阅读 多人点赞 2018-12-12 21:12:32
    这颗心的代码已经给出来了 public void draw(Graphics g){ for(int i=0;i&lt;=180;i++){ for(int j=0;j&lt;=180;j++){ double r=Math.PI/45*i*(1-Math.sin(Math.PI/45*j))*20; ...
  • [Unity动画]给人物模型添加简单的动画

    万次阅读 多人点赞 2016-08-25 13:02:23
    一个选项是动画的类型,因为导入的是人物模型,所以应该选择人形;第二个是人物骨骼,这里已经设好了;第三个选项是对物体进行优化,建议勾选吧 将预制体拖拽到场景中后,系统会自动生成一个Animator组件, ...
  • Unity,游戏。 本文设计了一个第一人称射击游戏的Demo开发过程,文中对射击游戏的基础功能做了一个详细介绍,适用于一个基础框架,可以用于一个射击游戏的完整开发,请品尝。
  • 详解Canvas动画部分

    万次阅读 多人点赞 2020-06-29 14:02:45
    裁切路径创建之后所有出现在它里面的东西才会画出来。在画线性渐变时我们就会注意到这点。然后会绘制出50 颗随机位置分布(经过缩放)的星星,当然也只有在裁切路径里面的星星才会绘制出来。 效果图 7.动画基本步骤...
  • 怎样才能画好动漫人物头发?画好动漫人物头发有哪些技巧?想必这些问题都是绘画初学者们比较伤脑筋的问题,那么到底怎样才能画好动漫人物头发呢?今天灵猫课堂老师就在网络上收集整理了关于动漫人物头发怎么画?动漫...
  • 在OpenCV里用polylines多边形

    千次阅读 2019-12-23 11:48:10
    在OpenCV进行图像处理时,有时候需要标记一些多边形物体,那么就需要使用函数polylines来画出来。先来看看这个函数polylines画出来的图,...不过仔细地分析和了解之后,就可以根据需要来设置每一个参数。这个函数的...
  • 今天想带大家从零开始实现一个谷歌开发的小游戏 —— Quick, Draw! 或是叫“限时涂鸦”!点击打开链接 (谷歌所有,需科学上网…)在本文将涉及到以下内容:准备数据训练用于图片分类的神经网络(Caffe)Python实现...
  • 想必这些都是绘画初学者们经常在想的问题吧,就是不知道如何才能绘画好幅好看的插画 那么今天奇天CG学院就在网络上收集整理了一些关于如何绘画插画的教程给大家,完成幅插画需要多少步骤几知识点?JK短裙少女...
  • 想必这些都是绘画初学者们经常在想的问题吧,就是不知道如何才能学习好绘画,然后绘画出自己想要的东西 那么今天奇天CG学院就在网络上收集整理了一些关于如何绘画人体结构比例的教程给大家,人体结构的固定比例!...
  • matlab画一组数据的频率分布图

    千次阅读 2019-11-11 15:37:15
    matlab画一组数据的频率分布图 L空间度汇总.xlsx B=xlsread(‘L空间度汇总.xlsx’); %注意点,待处理数据的excel文件要和脚本文件路径相同,即放置在同一文件夹下,否则无法正确读入数据。 m_1=0; m_2=0; m_3=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 177,448
精华内容 70,979
关键字:

怎么才能画出来一个