第二天android

  画板

今天学了画板,主要是三个部分(Color,Paint,Canvas),即(颜色,画笔,画布)。

 

 

下面是我今天做的简易画板:


 

 

 

 

具体代码的实现,我是在现有的代码上进行修改实现的。原来的代码只能够画一笔,之后画就会刷新原来画的东西,而我大致实现了以下新增加的功能

 

 

连续不断的画:

原来的代码为每次是新建立的的存放点的数组,所以我改成用一个数组来存放点,即

private ArrayList<Point> pointall=new ArrayList<Point>();

但是,光改这一个,会导致所有的点都连成一条线,故我对onDraw函数进行了改写,改完后的代码如下(在鼠标点击的时候,加入一个(0,0)的点来作为标记,判断是不是另外一笔):

protected void onDraw(Canvas canvas){  

        if(pointall.size()>1){  

            Iterator<Point> iter=pointall.iterator();// 取出存放点的数组

            Point first=null;  

            Point last=null;  

            while(iter.hasNext()){  

                if(first==null){  

                while(iter.hasNext()){     //取得一个非(0,0)的线的开头

                first=(Point)iter.next(); 

                if(first.x!=0||first.y!=0) break;

                } 

                }  

                else{   

                    if(last!=null){  

                    first=last;    //将下一个坐标点赋给上面的  

                   }  

                last=(Point)iter.next();    //取得下一个点

 

                if(last.x==0&&last.y==0){     //判断

                while(iter.hasNext()){

                first=(Point)iter.next(); 

                if(first.x!=0||first.y!=0) break;

                }

 

                if(iter.hasNext()){

                last=(Point)iter.next();  

                }

                else break;

                }

                canvas.drawLine(first.x, first.y, last.x, last.y,pa);           

                }  

            }  

        }  

    }

代码虽然简单,但是在编写的时候还是遇到了各种错误,有时候会死机,有时候会将(0,0)和其他点连成一条直线,等等......现在这个代码,是大致还算可以的

 

 

修改画笔的颜色和大小:

目前做的是可以改颜色和大小的,但是一改,以前画的也会改变,这个是因为代码中用的是重构,即重新画,而不是在现有的画上添加,而在重新画的时候,是以你现在的颜色和大小来画的,会丢失前面的颜色和大小这些信息,如果要解决,则要新建一些空间来存放这些信息,比如类和数组,之后在根据这些信息来画,这样就不会改变以前的画的了,但是目前水平还一点欠缺,没有完成,现在只能统一改变颜色和大小,下面是这部分的代码:

 

public static void change_big(String string) {

 pa.setStrokeWidth(Integer.parseInt(string));      //修改画笔大小的函数(pa是我定义为全局变量的画笔)

}  

 

 

  static public void change(String a) {

 

 if(a.equals("BLACK"))     pa.setColor(Color.BLACK);    //修改画笔颜色的函数

 if(a.equals("DKGRAY"))    pa.setColor(Color.DKGRAY);

 if(a.equals("GRAY"))      pa.setColor(Color.GRAY);

 if(a.equals("LTGRAY"))    pa.setColor(Color.LTGRAY);

 if(a.equals("RED"))       pa.setColor(Color.RED);

 pa.setStrokeWidth(22);

}

 

 

//绑定多选框和与其对应的函数--------颜色

        Spinner spinner = (Spinner) findViewById(R.id.spinner2);

        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view, 

                    int pos, long id) {

           

                String[] languages = getResources().getStringArray(R.array.languages);

                Toast.makeText(draw_main.this, "你点击的是:"+languages[pos], 2000).show();

                draw.change(languages[pos]);

 

            }

 

            public void onNothingSelected(AdapterView<?> parent) {

            }

        }

        );

        

        

        

//绑定多选框和与其对应的函数--------大小

        Spinner big = (Spinner) findViewById(R.id.spinner1);

        big.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view, 

                    int pos, long id) {

                String[] big = getResources().getStringArray(R.array.big);

                Toast.makeText(draw_main.this, "你点击的是:"+big[pos], 2000).show();        

                draw.change_big(big[pos]);

            }

            @Override

            public void onNothingSelected(AdapterView<?> parent) {

                // Another interface callback

            }

        }

        

        );

 

除此之外,我还用到了多选框的一些东西(样式很丑,但不知道怎么改)(虽然简单,但还是记录一下):

多选框:

    <Spinner

        android:id="@+id/spinner1"    //id

        android:layout_width="90dp"

        android:layout_height="50dp"

        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true"

 

        android:layout_marginLeft="100dp"     //控制位置的

        android:entries="@array/big"     //对应存放数据的位置

         />

 

存放数据,在res--values下面,可以自己建立一个新的xml来存放:

        <string-array name="big">   //名称,要和前面对应

        <item>10</item>      //数据(字符串格式)

        <item>20 </item>

        <item>30</item>

        <item>40</item>

        <item>50</item>

    </string-array>

 

 

ps:刚刚遇到的不能不同线条不同颜色和粗细的问题,已经找到解决方法了,

思路:因为颜色和粗细也i是int类型的,所以可以再加一个点来存储该信息,不过要注意类型的转换和大小!!!

具体见

http://sixsixccff.iteye.com/blog/2382143

猜你喜欢

转载自2048992996.iteye.com/blog/2382144