画板
今天学了画板,主要是三个部分(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
相关推荐
在“第二天android项目 基本空间的用法”中,我们将会探讨如何有效地利用各种UI元素,如按钮(Button)和菜单(Menu),来创建交互式和功能丰富的应用。 首先,Android中的基本空间主要指的是布局(Layout),它是...
android 实例 第二天 练习 源代码 项目 这是我为android爱好者兼初学者提供的实例源代码第二天,可能第一天的内容稍微复杂了一些。不过我相信第一步走的艰难的时候,可能以后就会觉得顺畅了,我也知道一般查找实例的...
在“Android 学习第二天”这个主题中,我们主要探讨的是Android开发的基础知识,特别是针对初学者。在学习过程中,源码分析和工具使用是非常重要的组成部分。以下是对这些知识点的详细说明: 一、Android基础知识 ...
在“传智播客_Andorid_Android基础视频video_第二天修”这个压缩包中,包含的是关于Android基础知识的教程视频。这些视频很可能是由知名教育机构“传智播客”制作,旨在帮助初学者或者有志于深入Android开发的学员...
2015.10.29android第二天,自己看android视频时的截图笔记。
本压缩包文件"3G手机Android应用开发第二天代码.rar"可能包含了一天课程的学习代码示例,旨在帮助初学者深入理解Android应用的构建过程。 Android应用开发主要基于Java语言,使用Android SDK(Software Development...
【第二天:UI组件与布局管理】 在"day2"(可能是day18)的课程中,将深入研究Android用户界面(UI)组件,如TextView、Button、EditText等,以及如何使用布局管理器(如LinearLayout、RelativeLayout和...
编码实现软件界面【】3G手机Android应用开发第二天课程1.单元测试与输出日志信息【】3G手机Android应用开发第二天课程4.采用SAX解析XML-1【】3G手机Android应用开发第二天课程5.采用SAX解析XML-2【】3G手 资源太大,...
在Android开发的第二天课程中,可能涵盖以下几个关键知识点: 1. **Android Studio介绍**:Android Studio是官方集成开发环境(IDE),用于构建Android应用。它提供了一个全面的工具集,包括代码编辑器、调试器、...
第二天的讲解重点可能是深入Android组件,特别是Activity和Intent。Activity是Android应用中的一个视觉工作单元,而Intent则用于在组件间传递消息。学员将了解如何启动Activity,处理生命周期方法,以及使用Intent...
6. 离线地图:如果需要离线使用天地图,可以考虑使用ArcGIS的缓存机制或第三方库实现地图切片的下载和存储。 以上是关于使用ArcGIS for Android访问天地图的基本知识和可能遇到的问题。通过学习和实践,你可以创建...
从提供的标签"几个android的小程序"以及压缩包内的文件名称,我们可以推断这是一系列逐步进阶的学习材料,可能包括了从第一天到第二天的学习内容。 首先,让我们来看看`Android_day01`的相关内容。在第一天的学习中...
在Android平台上,开发一个能够精确计算农历二十四节气的应用是一个具有挑战性和实用性的项目,尤其对于计算机科学与技术专业的毕业生来说,这样的毕业设计能够展示出扎实的编程基础和对传统文化的理解。下面将详细...
在“day0220100329”这个文件名中,我们可以推测这是课程的第二天内容,可能涵盖了更深入的HAL开发实践或者特定模块的实例分析。可能包括了如何处理中断、线程同步、错误处理等方面的知识。 此外,2010年3月的培训...
13. **第二日学习内容**:根据"第二天.md"文件名推测,这部分可能详细介绍了上述的一些概念或进行了更深入的实践操作,可能包括创建新项目、运行第一个应用、理解Activity生命周期、使用布局设计界面等。 14. **无...