Android中Path类的lineTo方法和quadTo方法画线的区分

package com.feixun.hu.pt;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //setContentView(new MySurfaceView(this));
        setContentView(new DrawingWithBezier(this));
        //setContentView(new DrawingWithoutBezier(this));      
    }
}

2. 生存中,会有人利用大家不精通的认知偏差来误导大家的思考,让咱们做出错误的支配。如何被误导,我会在前面的一序列小说中详述。而只要我们知晓了那几个或许被使用的咀嚼偏差,就可以对这几个骗局或虚伪广告暴发免疫力。

     
 上边的绘图图案格局都是依据View来绘制,当然,大家也得以结合SurfaceView和Rect来兑现绘制贝塞尔曲线,那样绘制的法力绝对会相比好,而且功效也针锋相对较高,毕竟相对SurfaceView而言,在动态绘制点线方面比较View尤其杰出;

拉里(Larry)答应货到登时发货。

   2).MainActivity:

近日自己在读一本书,书名叫《
世界上这几个出名的信件珍藏》。发现不仅我有时候会犯傻,伟人也有犯傻的时候。书中募集了一些拿破仑给两任太太的情书。其中有一封1814年八月写给第二任爱妻玛丽(Mary)·路易丝(路易斯e)(奥地利(Austria)公主)的信是这么写的:

   2). MainActivity:

而后追思,在贸易前,大家给协调画了个烧饼。两台手机赚200台币。假若一年卖一千台,就是20万韩元。再过几年,就可开大公司了呀。鸡生蛋,蛋成鸡群,鸡群变羊群,最终成飞机群,是大家的思辨。那种思考叫美好愿望思维(Wishful
Thinking), 因太沉浸在不切实际的美好愿望中而忽视了被骗的风险,是一种叫注意力错觉的咀嚼偏差。

       1).自定义View:

吕式春秋里写了个亡斧疑邻的寓言故事:人有亡斧者,意其邻之子。视其行步,窃斧也;颜色,窃斧也;言语,窃斧也;动作神态,无为而不窃斧也。 俄而掘其谷而得其斧,他日复见其邻居之子,动作神态无似窃斧者。

       1). 自定义View:

2 心情障碍

   
 该办法完毕的独自是两点连成一线的绘图线路,那样,当大家用那个形式绘制曲线时,缺陷就出去了;下边的例子,同样如故和地点的Demo大概,只然则Path调用的是lineTo方法,如下:

自身在几年前则犯了个“信邻而亡币”的荒唐。

   1. Path—>quadTo(float x1, float y1, float x2, float y2):

例如俗话说的“一朝被蛇咬,十年怕井绳”,两次毕生难忘的强刺激使人爆发了难以改变的性心理障碍。

   
贝塞尔曲线的多变,就比如大家把一条橡皮筋拉直,橡皮筋的头底部对应源点和极端,然后从拉直的橡皮筋中甄选随机一点(除头尾对应的点外)扯动橡皮筋形成的曲折形状,而卓殊扯动橡皮筋的点就是控制点;

“APPLE IPHONE: 2”(三星手机:两台)

  该Demo完结用户在小弟大屏幕上滑下手指时,可依照手指滑动的岗位绘制出相应的线条,类似输入法手势的绘图,所以代码中的画笔Paint命名为mGesturePaint;

1 常见的回味偏差 (以故事形式)

package com.feixun.hu.pt;

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.Bitmap.Config;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class DrawingWithoutBezier extends View
{
    private float mX;
    private float mY;

    private final Paint mGesturePaint = new Paint();
    private final Path mPath = new Path();

    public DrawingWithoutBezier(Context context)
    {
        super(context);
        mGesturePaint.setAntiAlias(true);
        mGesturePaint.setStyle(Style.STROKE);
        mGesturePaint.setStrokeWidth(5);
        mGesturePaint.setColor(Color.WHITE);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        // TODO Auto-generated method stub
        switch (event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                touchDown(event);
                 break;
            case MotionEvent.ACTION_MOVE:
                touchMove(event);
        }
        //更新绘制
        invalidate();
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        canvas.drawPath(mPath, mGesturePaint);
    }

    //手指点下屏幕时调用
    private void touchDown(MotionEvent event)
    {

        //mPath.rewind();
        mPath.reset();
        float x = event.getX();
        float y = event.getY();

        mX = x;
        mY = y;

        //mPath绘制的绘制起点
        mPath.moveTo(x, y);
    }

    //手指在屏幕上滑动时调用
    private void touchMove(MotionEvent event)
    {
        final float x = event.getX();
        final float y = event.getY();

        final float previousX = mX;
        final float previousY = mY;

        final float dx = Math.abs(x - previousX);
        final float dy = Math.abs(y - previousY);

        //两点之间的距离大于等于3时,连接连接两点形成直线
        if (dx >= 3 || dy >= 3)
        {
            //两点连成直线
            mPath.lineTo(x, y);

            //第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值
            mX = x;
            mY = y;
        }
    }

}

有关小说:

package com.feixun.hu.pt;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(new MySurfaceView(this));
        //setContentView(new DrawingWithBezier(this));
        //setContentView(new DrawingWithoutBezier(this));      
    }
}

陈年有私房,丢了一把斧子。他疑惑是邻里家的外孙子偷去了,便私自观看那人。

转载:http://blog.csdn.net/stevenhu\_223/article/details/9229337


  用该例子绘制S形图案,形成的美术如下:

俺们收起的只是一封信:

package com.feixun.hu.pt;

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.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MySurfaceView extends SurfaceView 
{
    private Context mContex;
    private float mX;
    private float mY;

    private SurfaceHolder sfh;
    private Canvas canvas;
    private float mCurveEndX;
    private float mCurveEndY;

    private final Paint mGesturePaint = new Paint();
    private final Path mPath = new Path();
    private final Rect mInvalidRect = new Rect();

    private boolean isDrawing;

    public MySurfaceView(Context context)
    {
        super(context);
        mContex = context;
        sfh = this.getHolder();
        mGesturePaint.setAntiAlias(true);
        mGesturePaint.setStyle(Style.STROKE);
        mGesturePaint.setStrokeWidth(5);
        mGesturePaint.setColor(Color.WHITE);
        // TODO Auto-generated constructor stub
    }

    public void drawCanvas() {
        try {
            canvas = sfh.lockCanvas();
            if (canvas != null) {
                canvas.drawColor(Color.BLACK);
                canvas.drawPath(mPath, mGesturePaint);
            }
        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            if (canvas != null)
                sfh.unlockCanvasAndPost(canvas);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        // TODO Auto-generated method stub
        switch (event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                touchDown(event);
                invalidate();
                return true;

            case MotionEvent.ACTION_MOVE:
                if (isDrawing)
                {
                    Rect rect = touchMove(event);
                    if (rect != null) {
                        invalidate(rect);
                    }
                    return true;
                }           
                break;
            case MotionEvent.ACTION_UP:
                if (isDrawing)
                {
                    touchUp(event);
                    invalidate();
                    return true;
                }
                break;        
        }
        return super.onTouchEvent(event);
    }

    private void touchDown(MotionEvent event)
    {
        isDrawing = true;
        mPath.reset();
        float x = event.getX();
        float y = event.getY();

        mX = x;
        mY = y;

        mPath.moveTo(x, y);

        mInvalidRect.set((int) x, (int) y, (int) x , (int) y);
        mCurveEndX = x;
        mCurveEndY = y;
    }

    private Rect touchMove(MotionEvent event)
    {
        Rect areaToRefresh = null;

        final float x = event.getX();
        final float y = event.getY();

        final float previousX = mX;
        final float previousY = mY;

        final float dx = Math.abs(x - previousX);
        final float dy = Math.abs(y - previousY);

        if (dx >= 3 || dy >= 3)
        {
            areaToRefresh = mInvalidRect;
            areaToRefresh.set((int) mCurveEndX , (int) mCurveEndY ,
                    (int) mCurveEndX, (int) mCurveEndY);

          //设置贝塞尔曲线的操作点为起点和终点的一半
            float cX = mCurveEndX = (x + previousX) / 2;
            float cY = mCurveEndY = (y + previousY) / 2;

            //实现绘制贝塞尔平滑曲线;previousX, previousY为操作点,cX, cY为终点
            mPath.quadTo(previousX, previousY, cX, cY);
            //mPath.lineTo(x, y);

            // union with the control point of the new curve
            /*areaToRefresh矩形扩大了border(宽和高扩大了两倍border),
             * border值由设置手势画笔粗细值决定
             */
            areaToRefresh.union((int) previousX, (int) previousY,
                    (int) previousX, (int) previousY);
           /* areaToRefresh.union((int) x, (int) y,
                    (int) x, (int) y);*/


            // union with the end point of the new curve
            areaToRefresh.union((int) cX, (int) cY ,
                    (int) cX, (int) cY);

            //第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值
            mX = x;
            mY = y;
            drawCanvas();
        }
        return areaToRefresh;
    }

    private void touchUp(MotionEvent event)
    {
        isDrawing = false;
    }
}

翻译成白话文是那样的:

    结论
:相比较前边quadTo方法绘制的S,lineTo绘制的S在曲折部分很扎眼的不可能形成平滑的弯曲,会出现明显的两点形成细小的突痕。可能图片看的不是知道,自行运作那么些Demo,然后在屏幕上绘制弯曲曲线或者圆,相比较查看他们的形象差异就一目了解;

我上过的一个当

  当大家必要在显示器上形成画线时,Path类的行使是要求的,而Path类的lineTo和quadTo方法达成的绘图线路形式也是分歧的,上面就以代码的兑现来直观的探索那多个措施的成效达成不一致;

我去……

      1).自定义SurfaceView:


    
该情势的落到实处是当我们不仅是画一条线甚至是画弧线时会形成平滑的曲线,该曲线又称为”贝塞尔曲线”(Bezier
curve),其中,x1,y1为控制点的坐标值,x2,y2为终极的坐标值;

下图中,绿色的线形成的路线是大家借使正常思考而形成的思绪,而两条斜的黄色线路则分别表示因本人考虑中的认知偏差走偏和因旁人误导走偏的思维方向。

  5588葡京线路 1

在成人的历程中,各个程序不断安装到大脑中,例如决策程序,问题解决程序,阅读程序,当然还有如下那些小程序:

       如下代码:

在前面的小说,我会分享以下内容:

package com.feixun.hu.pt;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //setContentView(new MySurfaceView(this));
        //setContentView(new DrawingWithBezier(this));
        setContentView(new DrawingWithoutBezier(this));      
    }
}

Mon Amie (保加利亚语:我的意中人),
过去的几天自己为主都在马鞍上度过。20号自身拿下了
阿奇茨-舍-奥布(法兰西共和国地名)。
敌军早上六点时攻击了我们;我同晚回手,杀敌400人。
大家抢了他们的两条枪,

她们夺了俺们的两条枪,所以同样了。21日,敌军形成应战防卫阵列来维护其主力部队向布佛罗伦萨和巴舍奥布进军。我说了算向马尼和敌军的互换部队出征,那样就可以把她们赶得离法国巴黎远点,并退回他们的驻地。我今天晚上能到圣迪兹尔。

再见了,Mon Amie。亲自己的孙子。

Nap

 2. Path—>lineTo(float x, float y) :

1. 只要大家不知情认知偏差的留存,大家的构思就会时常被那个大脑中的虫所勒迫,导致思路走偏。而即使大家掌握了这几个认知偏差的形成原理,我们就可以在构思出错后分析我们的笔触,找到影响大家思考的体会偏差。逐渐地,那些认知偏差就不对我们的思索形成损伤。

    下就面以一个Demo来整合精通quadTo函数的施用,代码如下:

2 怎么会生出体味偏差;

package com.feixun.hu.pt;

import android.content.Context;
import android.gesture.GestureStroke;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class DrawingWithBezier extends View
{
    private float mX;
    private float mY;

    private final Paint mGesturePaint = new Paint();
    private final Path mPath = new Path();

    public DrawingWithBezier(Context context)
    {
        super(context);
        mGesturePaint.setAntiAlias(true);
        mGesturePaint.setStyle(Style.STROKE);
        mGesturePaint.setStrokeWidth(5);
        mGesturePaint.setColor(Color.WHITE);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        // TODO Auto-generated method stub
        switch (event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                touchDown(event);
                 break;
            case MotionEvent.ACTION_MOVE:
                touchMove(event);
        }
        //更新绘制
        invalidate();
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        //通过画布绘制多点形成的图形
        canvas.drawPath(mPath, mGesturePaint);
    }

    //手指点下屏幕时调用
    private void touchDown(MotionEvent event)
    {

        //mPath.rewind();
        //重置绘制路线,即隐藏之前绘制的轨迹
        mPath.reset();
        float x = event.getX();
        float y = event.getY();

        mX = x;
        mY = y;
        //mPath绘制的绘制起点
        mPath.moveTo(x, y);
    }

    //手指在屏幕上滑动时调用
    private void touchMove(MotionEvent event)
    {
        final float x = event.getX();
        final float y = event.getY();

        final float previousX = mX;
        final float previousY = mY;

        final float dx = Math.abs(x - previousX);
        final float dy = Math.abs(y - previousY);

        //两点之间的距离大于等于3时,生成贝塞尔绘制曲线
        if (dx >= 3 || dy >= 3)
        {
            //设置贝塞尔曲线的操作点为起点和终点的一半
            float cX = (x + previousX) / 2;
            float cY = (y + previousY) / 2;

            //二次贝塞尔,实现平滑曲线;previousX, previousY为操作点,cX, cY为终点
            mPath.quadTo(previousX, previousY, cX, cY);

            //第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值
            mX = x;
            mY = y;
        }
    }

}

3 瘾

   3. SurfaceView绘制贝塞尔曲线:

L01E01十万字写书安排 |
一语中的

   2).MainActivity:

亡斧疑邻

  相关代码下载链接:http://download.csdn.net/detail/stevenhu_223/5702603

雨后春笋文章的目标:

当丢斧人早先难以置信邻居家的幼子后,就只专注到对方可能偶尔象是偷斧人的言行举止,而对其跟平日一样的表现马耳东风。

拿破仑的失误

5 价值观

咱俩等了一星期,什么也没接过。大家急了,就向他要卷入跟踪号。拉里(拉里)很舒心,立刻发来一串号码。

这个习惯是一对大家常常生活中逐年养成的,一般很难改变。在分化地点或文化氛围生活会养成不一样的行为习惯。因为长期在加拿大生活,我养成排队离最前方的人一米以上的习惯。两年前回国,买轻轨票时,我也是这么排队。结果被一个巾帼一贯插队。我看了看旁边其他武装,发现唯有我一个是那般排队,只得苦笑,往前走了一大步

咱们查了弹指间,是有那些包裹,还在运送中。心也放下了。

对待效应

L03E01

这封信后来不幸被她的敌军截获。敌军是由U.K.,布鲁斯和俄联邦等军事构成的结盟军团。盟军也因此知晓了法军的行迹,并打败了拿破仑。值得一提的是,盟军总司令布鲁舍将军是个绅士,最后照旧把信交给了玛丽·路易斯(Louis)e。

大家的大脑其实就象台电脑。在小儿的时候,大脑没有装操作系统,唯有底层的硬件自带控制连串让大家会哭,笑和喝奶。逐渐地大家的养父母教大家语言,我们也学会了问问题,大家的大脑也开始装了学习类程序。

眼前亡斧疑邻中的丢斧人所犯的错也是因一种认知偏差造成的,叫做确认偏差。

新兴再找拉里, 大家所轻信的拉里(Larry)先生已不复存在得不剩一点踪影。

瘾是一种对某种物体或运动时有暴发看重的思维情况。比如烟瘾促使爱吸烟的人明知道抽烟危害健康也要乐此不疲,酒瘾使酒鬼每一日不喝醉绝不甘休,对玩者荣耀上瘾使玩家们稍一有空就手痒难忍,玩上一盘。

又过了几天,终于接受了。并且证实了咱们对加拿大海关的焦虑是多余的。

于是乎就发现:那人走路的规范,像是偷斧子的;那人的面色表情鬼鬼祟祟,也像是偷斧子的;那人说话顾而言他,更像是偷斧子的,那人的一举一动,一颦一笑,无一不像偷斧子的。

这一个认知偏差潜伏在大家的大脑的下意识里,它们就象电脑中的小程序,有的竟是像是病毒,在大家不经意间运行,让大家做出之后后悔末及的失实决定。

增进我的写作力和思维力;

何以要清楚周边的回味偏差?

咱俩大脑中的“程序”

1 行为习惯

其余, 假设让部分简友学到一点增加思维力的学问就更好了。

大约二〇〇九年的时候,我跟一个爱人做电商工作。大家做的是手机生意,重假若在EBAY
加拿大站上卖。做电商,有稳定低价优质的正品货源是最要害的一个环节,因为EBAY不容许卖假货,而且是买家利益至上的一个样式。

沉凝走偏的三种情景

又等了一个星期,仍然没到。再查包裹,已到加拿大国内。大家初阶有些担忧。但是关键仍旧放心不下加拿大海关会查半天,并且要收关税。

我们在网络上遍地找货源。功夫不负有心人,大家在CRAIGSLIST(北美的中华英才网)上找到一个有IPhone货源的United Kingdom人拉里(拉里)。一番邮件往来后大家跟她在SKYPE上挂钩。在几天的聊天将来,大家已把她当对象,并控制先试购两台。我们因而PAYPAL(贝宝,约等于支付宝)付款,货款好象是700美金。就算一切顺遂,大家很不难就能赚到200卢比。

4 认知偏差

在我们的成才历程中,逐步形成了一部分骨干的人生行事原则,那叫价值观。

5588葡京线路,快速后,丢斧子的人在顶峰挖土的时候发现了她的斧头。第二天又看到邻居家的幼子,就觉得她言行举止没有一处像是偷斧子的人了。

智者千虑,必有一失。聪明如拿破仑,也会犯愚拙的不当。连日征战的他也许是太在意于对家人的怀念,而忽视了信件可能被截的权利险。那也是出于注意力错觉引起。

注意力错觉

3 怎么着鉴别认知偏差 (方法和沉思框架)

欢迎学心情学的简友或此外简友批评指点。

从众效应

因为每分每秒,大脑都要收取众多音信,为了增强决策和判断效能,大脑有一对处理音信的规则,这个规则称为寻思捷径。有些思想近便的小路会使人做出不合逻辑的论断和操纵,那一个思考近便的小路称为认知偏差