补下上节课的章节,键盘事件,OnKeyListener实例实现一个输入框判断是否是email地址,是的话换图片为对勾:
public class MainActivity extends Activity { private EditText edit=null; private ImageView image=null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.edit=(EditText)super.findViewById(R.id.edit); this.image=(ImageView)super.findViewById(R.id.image); this.edit.setOnKeyListener(new keychange()); } private class keychange implements OnKeyListener{ @Override public boolean onKey(View v, int keycode, KeyEvent event) { MainActivity.this.image.setImageResource(R.drawable.right); switch(event.getAction()){ case KeyEvent.ACTION_UP: String meg=MainActivity.this.edit.getText().toString(); if(meg.matches("\\w+@\\w+\\.\\w+")){ MainActivity.this.image.setImageResource(R.drawable.right); } else{ MainActivity.this.image.setImageResource(R.drawable.wrong); } case KeyEvent.ACTION_DOWN: default: break; } return false; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
这里要准备两张图,对图和错图,默认错图 实现效果为:
Android中的触摸事件可是大头中的大头,我们这一节课是要实现一个小小绘图板
其中onTouch事件是在view中定义的,所以想要实现绘图,自己要定义一个绘图组件,这个组件一定要继承view类,同时覆盖重写view中的onDraw方法。
Android画图最基本的三个对象(Color,Paint,Canvas)
三个类都存放在 android.graphics包下
1) Color :颜色对象,相当于现实生活中的 ‘调料’
2) Paint : 画笔对象,相当于现实生活中画图用的 ‘笔’————主要的还是对‘画笔’进行设置
3) Canvas : 画布对象,相当于现实生活中画图用的 ‘纸 或 布’
public class paintview extends View{ private List<Point> pointall=new ArrayList<Point>(); public paintview(Context context, AttributeSet attrs) { super(context, attrs); super.setBackgroundColor(Color.WHITE); super.setOnTouchListener(new Touch()); } private class Touch implements OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent e) { // TODO Auto-generated method stub Point p=new Point((int)e.getX(),(int)e.getY()); if(e.getAction()==e.ACTION_DOWN){ //当按下 pointall=new ArrayList<Point>(); pointall.add(p); } else if(e.getAction()==e.ACTION_UP){//当抬起 pointall.add(p); paintview.this.postInvalidate(); //重绘 } else if(e.getAction()==e.ACTION_MOVE){ pointall.add(p); //移动时候 paintview.this.postInvalidate(); //重绘 } return true; } } protected void onDraw(Canvas canvas){ Paint p=new Paint(); //定义画笔 p.setColor(Color.RED); //定义颜色 if(pointall.size()>1){ Iterator<Point> iter=pointall.iterator();// 现在有坐标点保存的时候可以开始进行绘图 Point first=null; Point last=null; while(iter.hasNext()){ if(first==null){ first=(Point)iter.next(); } else{ if(last!=null){ first=last; //将下一个坐标点赋给上面的 } last=(Point)iter.next(); //不停下指 canvas.drawLine(first.x, first.y, last.x, last.y,p); } } } } }
然后在配置文件配置你的组件
<com.example.paint.paintview
android:id="@+id/paintview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
这里我们突兀发现了一个新名词:Iterator 迭代器,为什么要使用迭代器?
那我们来看看不用迭代器的后果
迭代模式是访问集合类的通用方法,只要集合类实现了Iterator接口,就可以用迭代的方式来访问集合类内部的数据,Iterator访问方式把对不同集合类的访问逻辑抽象出来,使得不用暴露集合内部的结构而达到循环遍历集合的效果。
例如,如果没有使用Iterator,遍历一个数组的方法是使用索引:
- for(int i=0; i<array.length; i++) { ... get(i) ... }
这种方法的缺点就是事先必须知道集合的数据结构,而且当我换了一种集合的话代码不可重用,要修改,比如我用set,就不能通过索引来遍历了。访问代码和集合是紧耦合,无法将访问逻辑从集合类和客户端代码中剥离出来,每一种集合类对应一种访问方式,代码不可重用。
为解决以上问题,Iterator模式总是用同一种逻辑来遍历集合。
每一种集合类返回的Iterator具体类型可能不同,Array可能返回ArrayIterator,Set可能返回SetIterator,Tree 可能返回TreeIterator,但是它们都实现了Iterator接口,因此,客户端不关心到底是哪种Iterator,它只需要获得这个 Iterator接口即可,这就是面向对象的威力。
这就是针对抽象编程的原则:对具体类的依赖性最小。
还有Point:
这个类从字面意思就可以看出它跟点有关系,是点的一个对象类。
这个类有两个属性,分别是:X坐标和y坐标。
构造函数有三个:Point(),Point(int x,int y),Point(Point p)
我们来看下运行效果:
相关推荐
本节将探讨如何在Android应用中处理触摸事件,并通过一个简单的“小小画板”实例来阐述其基本原理。 首先,Android的触摸事件是通过MotionEvent类来表示的,它包含了触摸屏幕时的所有信息,如动作类型(ACTION_DOWN...
"利用touch触摸事件实现画板画画功能"是一个典型的移动设备应用编程案例,它涉及到触摸事件处理、图形绘制以及用户交互功能的集成。在这个过程中,开发者需要理解和掌握以下几个核心知识点: 1. 触摸事件处理: - ...
- 在绘图场景中,触摸事件可以用于实现画板应用。首先,需要一个可以绘图的自定义View,继承自`View`类。 - 在`onTouchEvent()`中,根据ACTION_DOWN记录起点,ACTION_MOVE期间记录路径,ACTION_UP时结束绘制。可以...
总的来说,这个"android画板"项目是一个很好的学习资源,它涵盖了Android开发中的关键概念,如自定义View、图形绘制、触摸事件处理和数据存储。对于想要提升Android图形编程能力的开发者来说,深入研究这个项目会有...
在Android开发中,创建一个简易画板(PaintOnTouchEvent)是一项常见的需求,它涉及到自定义View、触摸事件处理以及用户交互的设计。这个项目的核心在于如何有效地处理OnTouchEvent,以实现用户在屏幕上绘制图形的...
在Android平台上,开发一款画板应用,也称为白板或涂鸦应用,是常见的需求,尤其对于教育、设计和娱乐领域。...同时,它也是一个很好的教学实例,帮助初学者理解Android事件处理、绘图机制以及UI设计。
总的来说,实现"android颜色画板选择"涉及到了Android UI设计、触摸事件处理、颜色处理、数据存储等多个方面,这些知识点都是Android开发者必备的基础技能。通过这个功能的实现,开发者可以提升对Android图形系统和...
5. **事件处理**:触摸屏画板需要识别和处理各种用户事件,如按下、滑动、释放等。这需要一个事件处理机制,能够及时响应触摸事件并执行相应的操作,如绘制线条、擦除或填充颜色。 6. **用户界面设计**:良好的用户...
4. **触摸事件处理**:画板应用需要监听用户的触摸事件,如手指滑动、按压等,来实现画笔的移动和绘制。这涉及到MotionEvent类的使用,以及在Activity或View中重写onTouchEvent()方法。 5. **颜色选择和画笔样式**...
5. **中断处理**:电容屏产生的触摸事件通常通过中断触发,开发者需要熟悉STM32的中断处理机制,以及时响应触摸事件。 6. **调试技巧**:在开发过程中,学会使用ST-Link或J-Link等调试工具,通过查看寄存器状态、...
总的来说,"Android 图画板Demo"涵盖了Android开发中的触摸事件处理、自定义View、数据结构使用(如栈和队列)、图像操作(如Bitmap和Canvas)以及用户界面设计等多个方面,是学习Android应用开发的一个很好的实践...
通过监听屏幕触摸事件,可以实现画笔跟随手指移动进行实时绘制。 2. **图片处理**:可能使用了Android的Bitmap类进行图片加载、显示和编辑。开发者可能实现了图片裁剪、旋转、滤镜等操作,这些通常涉及到对像素数据...
总结来说,Android画板控件的核心是自定义视图和触摸事件处理,通过记录和绘制触摸轨迹来实现绘画功能,再通过位图操作保存为图片。同时,了解如何加载和展示图片,可以提升用户体验。对于Android开发者来说,掌握...
开发者可能通过记录用户的触摸事件(如`MotionEvent`)来追踪手指移动轨迹,并使用这些API来实时更新画布内容。 接下来,**历史记录功能**是这个画板的一大亮点。为了支持回退和前进操作,开发者需要保存每一次的...
对于用户交互,Android提供了`MotionEvent`事件来处理触摸输入。我们需要在`View`的`onTouchEvent()`方法中捕获这些事件,判断用户是按下、移动还是抬起手指。在移动过程中,不断更新绘图路径并触发重绘,从而实现...
1. **基本绘图操作**:用户可以通过手指触摸屏幕来绘制线条,画板控件会记录下每个点的坐标,然后在`onDraw()`方法中使用`Canvas`的`drawPath()`或`drawLine()`方法连接这些点,形成连续的线条。 2. **颜色和粗细...
7. **图片资源管理**: 在Android应用中,图片资源通常存储在res/drawable目录下,按照分辨率的不同放在不同的子目录中,如hdpi、xhdpi等,以确保在不同设备上适配显示。 8. **保存和加载画作**: 为了让用户保存他们...
通过这个"Android简易画板源码"项目,开发者不仅可以学习到自定义View的使用,还能掌握Android图形绘制、触摸事件处理以及性能优化等多方面知识。对于想要提升Android开发技能的人来说,这是一个很好的实践案例。