学习android第2天~~~
实现了一个简单的画图功能(很简陋的那种....)主要用到的控件有imageview、dialog
1、activity_main.xml
每次第一步先做都是将页面的布局设置好,这次的页面布局很简单;
包括3个imageview作为按钮,button的区别在于,我们可以使用自定义的图片来作为按钮,我们可以点击其中一个来设置画笔颜色、粗细或者选择画固定的图形
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="18dp" android:layout_marginStart="18dp" android:layout_marginTop="17dp" android:id="@+id/pen" android:background="@drawable/pen"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/pen" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_marginRight="10dp" android:layout_marginEnd="10dp" android:id="@+id/colors" android:background="@drawable/color"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/shape" android:layout_below="@+id/colors" android:background="@drawable/shape"//加载背景图片 android:layout_alignTop="@+id/colors" android:layout_centerHorizontal="true" /> //一下表示定义了一个画板(paintview是一个自定义的实现画图的类) <com.example.lainka.paint1.paintview android:id="@+id/paintview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/pen" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="13dp" />
2、MainActivity.java
该activity主要实现了对页面控件点击事件的获取,通俗一点就是,实现了我们怎么知道我在页面上点了哪个按钮,pen 按钮(选择画笔粗细)还是color(选择颜色) 按钮或者shape(选择形状)。以及点了这三个按钮又应该做些什么;
以color为例,点击color之后弹出对话框,显示我们所有的颜色,如下:
获取页面上的控件
public class MainActivity extends AppCompatActivity { public static final String[] C1={"红色","绿色","蓝色","黑色"};//用来表示页面上的颜色显示 public static final int[] C2={Color.RED,Color.GREEN,Color.BLUE,Color.BLACK}; public static final String[] P={"5","10","15","20"};//页面显示的画笔可以选择的粗细 public static final String[] S={"圆形","正方形","长方形"};//可以选择的图形 ImageView pen; ImageView shape; ImageView colors; paintview block; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pen=(ImageView)findViewById(R.id.pen); colors=(ImageView)findViewById(R.id.colors); shape=(ImageView)findViewById(R.id.shape); block=(paintview) findViewById(R.id.paintview);
监听color按钮,并弹出对话框,改变画笔的粗细和改变形状和这个异曲同工
colors.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); dialog.setTitle("选择一个颜色"); dialog.setItems(C1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { block.changecolor(C2[which]);//将页面上获取的到颜色传给paintview类,改变画笔的颜色 Toast.makeText(MainActivity.this, "你点击了" + C1[which], Toast.LENGTH_SHORT).show(); } }); dialog.show(); } });
3、paintview.java 画图的实现
(1)改变颜色
public void changecolor(int str)//str对应activity中C2数组,相当于把c2数组中内容传递过来 { p.setColor(str);//改变颜色 }
(2)改变画笔粗细
public void changepen(int str) { p.setStrokeWidth(str); }
(3)改变形状
public void changeshape(String str) { if(str.equals("圆形")) s=1; else if(str.equals("正方形")) s=2; else if(str.equals("长方形")) s=3; }
因为我们不能在画固定形状的同时又自己绘制图形,所以设定一个s的值来判断当前画图的方式
(4)ontouch函数,定义鼠标提起落下时进行的动作
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; }
(5)ondraw函数,开始画图啦啦啦啦
protected void onDraw(Canvas canvas){ //Paint p=new Paint(); //定义画笔 //p.setColor(Color.RED); //定义颜色 // p.setStrokeWidth(5); 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(); //不停下指 if(s==0)//自由画图 canvas.drawLine(first.x, first.y, last.x, last.y,p); else if(s==1)//画圆 canvas.drawCircle(100f, 50f, 50f, p); else if(s==2)//画正方形 canvas.drawRect(185, 70, 130, 120, p); else if(s==3)//画长方形 canvas.drawRect(200, 130, 130, 180, p); } } }
4、have a try~~~
本来想画一个萌萌哒的啥...但是我的绘画功底.....嗯,随意好啦
相关推荐
7. **画笔粗细与透明度调节**:源码还可能包含画笔宽度和透明度的调整功能,这些通常是通过SeekBar控件实现,配合Paint对象的setStrokeWidth和setAlpha方法来改变画笔属性。 8. **撤销与重做功能**:通过保存每次...
以上就是开发一个简单的Android画图应用所涉及的关键技术点,通过这些技术,我们可以创建一个功能丰富的画图工具,满足用户的基本需求。不过,实际开发过程中还需要考虑性能优化、用户体验等因素,以提供更优质的...
通过分析这个源码,开发者可以学习到如何在Android平台上构建一个功能完备且用户友好的画图应用。同时,这样的项目也提供了一个很好的实践平台,帮助开发者提升对Android图形系统和事件处理机制的理解。
这个项目名为"InteractDraw",显然是一个实现简单画图功能的应用,提供了丰富的操作选项,如移动图形、调整形状、改变大小以及选择画笔颜色和粗细。下面我们将深入探讨这些知识点。 1. **Android绘图基础**:...
本文将详细解析"android画图板"这个主题,介绍如何在Android中实现一个基本的画线功能,并探讨两种不同的实现方法。 首先,我们要了解Android中的画布(Canvas)和画笔(Paint)概念。Canvas是Android图形系统的一...
6. 用户交互:除了基本的绘图功能,画图工具通常还包含撤销/重做、选择颜色、改变画笔粗细等功能。这需要维护一个历史记录栈,每当用户绘制新内容时,将其推入栈中,撤销操作时则从栈顶弹出并重新绘制。 7. 数据...
这份"Android 画图工具源码"将为我们揭示实现这些功能背后的细节。源码是学习和理解Android图形系统、触摸事件处理以及自定义View的好材料。 首先,Android的图形绘制主要依赖于`Canvas`和`Paint`对象。`Canvas`...
这个工具不仅支持基本的绘画动作,如选择不同颜色、调整画笔粗细,还可以改变画笔形状,甚至实现橡皮擦功能以及撤销/重做操作。这些特性极大地增强了用户的创作体验,特别是在开发绘画应用或需要实时图形渲染的场景...
在这个demo中,用户可以调整字体大小、颜色和画笔粗细,这些都是通过改变Paint对象的属性实现的。 4. **MotionEvent**:Android系统用于处理触摸事件的类。当用户在屏幕上触摸或移动手指时,会产生一系列...
本文将深入探讨这个小画板应用的核心功能和技术实现。 首先,"Android小画板"的基础是Android SDK,它是开发Android应用程序的基石。通过使用Java或Kotlin等编程语言,开发者构建了这个应用程序,让用户能够进行...
- **改变画笔粗细**:使用`t.pensize(size)`方法可以改变画笔的粗细。 - **隐藏小海龟**:使用`t.hideturtle()`可以让小海龟隐藏起来,只显示绘制的图形。 - **清除屏幕**:使用`t.clear()`可以清除当前屏幕上所有的...
本文将深入解析如何使用Android Studio和核心组件Canvas、Paint以及Panel来创建一个简单的“随手涂鸦”画板应用。 首先,我们要了解Android应用的基本结构。一个标准的Android应用通常由多个组件构成,如Activity、...
9. **手势识别与压力感应**:如果设备支持,还可以利用压力感应来改变线条的粗细,实现更真实的书写效果。 以上是实现【安卓手写功能源代码】涉及的主要技术点,通过这些技术,我们可以构建出一个功能完善的手写...
此外,`DrawBoard`可能包含一个颜色选择器和画笔粗细调节功能,这需要额外的UI元素和逻辑。颜色可以通过设置`Paint`对象的`setColor()`方法改变,画笔粗细通过`setStrokeWidth()`设置。用户的选择可以通过`...
在实际开发过程中,我们可能会参考现有的开源库,如`android- circular-progress-bar`或`android-circleprogress`等,这些库已经实现了类似的功能,可以减少开发工作量。同时,通过阅读源码,可以学习到更多关于...
用户界面还需要提供画笔颜色和粗细的选择,这可以通过颜色选择器和滑动条来实现。 其次,为了实现画笔功能,我们需要理解触摸事件的处理。在Android中,我们可以监听`MotionEvent`,捕捉ACTION_DOWN、ACTION_MOVE和...
`Paint`则用来设置绘制的颜色、样式、粗细等属性,是绘制过程中不可或缺的一部分。 1. **Canvas的使用**: - `onDraw()`方法:这是自定义控件绘制的核心,所有的画图操作都必须在这个方法内完成。当控件需要更新时...
你需要为每个按钮的特定功能(如改变颜色、保存图片、涂色等)实现相应的方法。 6. **保存和分享**: - 为了保存用户的绘画,我们需要使用`Bitmap`的`compress()`方法将其转换为JPEG或PNG格式,并写入到文件系统中...
在画板应用中,用户可以选择不同颜色和粗细的笔触,这些功能通过`Paint`类实现。 2. **触摸事件处理**: - 安卓的`MotionEvent`类用于处理触摸屏幕的事件,如ACTION_DOWN(按下)、ACTION_MOVE(移动)和ACTION_UP...