android开发之画图版

一.新的开始,也是新的挑战:

  • 开始学习java,除了刚开始的时候有些难,觉得难有些晕,慢慢接触之后也就挺好的了, 学习了4天的安卓开发,完成了一个小程序,收获还是不小的;有一些java的基础,所以相对的画图板还是比较简单(对于理解代码而言);但是因为android和java有不一样的地方,所以有些地方应该要注意;不管怎么说新鲜的东西,新的起点。頑張って。

二.初识android:

  • android开发,第一个印象就是,测试麻烦;要用虚拟机或者接上手机,第一次测试的时候,挺不习惯的。
  • 第二点:界面是在layout上面设置的,android开发像是把很多的东西都分门别类了一样,有图片的文件包,有id,有value包;所以说,刚开始的时候,了解每个包的作用是开始的第一步。
  • 在android开发中,有一点不习惯的是android的界面,并不像java中的那样是画在JFrame中。首先是在xml文件中用线性布局来设计的,一个垂直的线性布局(LinearLayout)中添加几个水平的线性布局来使用。虽然刚开始的时候放了很多的错误,用错了方法,不熟悉开发的软件,不过最后还是完成了。下面是layout中组件与组件中控制距离的方法,
  • 另外和java不同的是,设置颜色的方法;在java中Color是一个类,但是android开发里面用的是十六进制来表示;虽然系统会自带一些颜色,不过要定义新的颜色的时候,就不能像java中那样,new 一个Color对象;而是:paint.setTextColor(0xffff00ff);//其中:0xffff00ff是int类型的数据,分组一下0x|ff|ff00ff,0x表示颜色整数的标记,ff表示透明度,ff00ff表示色值,注意:0x后面ffff00ff必须是8位的颜色表示。颜色和不透度 (alpha) 值以十六进制表示法表示。任何一种颜色的值范围都是 0到 255(00到 ff)。对于 alpha,00表示完全透明,ff表示完全不透明。表达式顺序是“aabbggrr”,其中“aa=alpha”(00到ff);“bb=blue”(00到ff);“gg=green”(00到ff);“rr=red”(00到ff)。
  • 设置颜色的几种方法:
  • 在xml文件中设置颜色的方法只能是  android:textColor="#FFFFFF"

三.画图版:

  • 这次做了一个自己的画图版,因为之前已经写过,所以花的时间不是很长,也比较容易,不过代码中值得注意的是还是有很多的;
  • 第一点添加监听:
  • 第一个就是监听方法的不一样:java中用的是add...,而android中使用的set...,android中OnClickListener用来监听鼠标点击相当于java中的ActionListener,OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。
  •  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button=(Button)findViewById(R.id.Button);//获取按钮对象;
    Loginlistenner l=new Loginlistenner();
    button.setOnClickListener(l);//给按钮加上监听;
    l.setMa(this);
    }
  • @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ImageView im=(ImageView)this.findViewById(R.id.imafeview1);//获取事件对象
    l=new Drawlisteners(this);
    im.setOnTouchListener(l);//给图片加上监听,也就是位图要显示的位置; }
  • 第二实现页面的跳转:
  • 当点击之后要进入一个新的界面的时候使用的是Intent:
  1. Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。 通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。 Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。
  2. 代码:在public void onClick(View v) {}中:
            Intent intent = new Intent();
    intent.setClass(ma, DrawActivity.class);
    ma.startActivity(intent);
    //setClass函数的第一个参数是一个Context对象
    //Context是一个类,Activity是Context类的子类,也就是说,
    //所有的Activity对象,都可以向上转型为Context对象
    //setClass函数的第二个参数是一个Class对象,
    //在当前场景下,应该传入需要被启动的Activity类的class对象
  • 第三:画笔,画布的实现(画图功能):
  • android中画图时 使用Paint画笔,画在Canvas画布上,再存到Bitmap位图上面,然后再把位图放到ImagineView上面
  • 在当位图为空时,在onTouch(View v, MotionEvent event){}函数中,创建位图,然后根据位图创建Canvas画布上,代码:
  • if (bt == null) {
    PaintFlagsDrawFilter mSetfil = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG);
    ima = (ImageView) v;// 获取对象;
    bt = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
    Bitmap.Config.ARGB_8888);
    cn = new Canvas(bt);
    cn.setDrawFilter(mSetfil);
  • 然后是把画布放到放到ImagineView上: ima.setImageBitmap(bt);
  • 第四:菜单:
  1. 在Activity函数里面重写onCreateOptionsMenu方法新建一个菜单;同时在menu中新建一个菜单文件。
  2. Activity函数中的代码:
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.draw, menu);
    return true;
    }
  3. 重写activity类的 onOptionsItemSelected(MenuItem)回调方法,每当有菜单项被点击时,android就会调用该方法,并传入被点击菜单项,代码:
  4. @Override
    public boolean onOptionsItemSelected(MenuItem item) { l.setItemId(item.getItemId());//传到监听方法中去;
    return true;
    }
  5. 把item.getItemId()获取的信息传入listener类中(该类继承了OnTouchListener),利用switch 语句来实现菜单功能;
  6. public void setItemId(int itemid) {
    switch (itemid) {
    case R.id.itm2:
    pain.setColor(0xffFF69B4);// 红
    break;
    case R.id.itm3:
    pain.setColor(0xff90EE90);// 绿
    break;
    case R.id.ite2:
    // 画一个空心圆,改变画笔的风格; /*设置paint的 style 为STROKE:空心*/
    pain.setStyle(Style.STROKE);
    break;
    case R.id.ite1:
    pain.setStyle(Style.FILL);//fill为实心
    break;
    case R.id.itme2:
    type = "line";
    break;
    case R.id.itme3:
    type = "oval";
    break;
    } }
  7. 在onTouch(View v, MotionEvent event){}函数中(监听方法中)实现画图功能;
    • MotionEvent.ACTION_DOWN:按下
    • MotionEvent.ACTION_UP:松开
    • MotionEvent.ACTION_MOVE:移动

    代码:

    int action = event.getAction();
    switch (action) {
    case MotionEvent.ACTION_DOWN:
    x1 = event.getX();
    y1 = event.getY();
    if (type.equals("三角金字塔形")) {
    drawsanjiaojinzita((int) x1, (int) y1);
    } else if (type.equals("角")) {
    drawjiao(); break;
    case MotionEvent.ACTION_UP:
    x2 = event.getX();
    y2 = event.getY();
    pain.setStrokeWidth((float) 3.0);
    if (type.equals("line")) {
    cn.drawLine(x1, y1, x2, y2, pain);
    } else if (type.equals("path")) {
    Path path4 = new Path();
    path4.moveTo(x1, y1);
    path4.lineTo(x2, y2);
    path4.lineTo((x1 + 50), (y2 + 10));
    path4.close();
    cn.drawPath(path4, pain);// 画一个三角形;
    } else if (type.equals("文字")) {
    pain.setTextSize(50);
    cn.drawText("雅雅最棒", x1, y1, pain); } else if (type.equals("")) {
    cn.drawLine(x1, y1, x2, y2, pain); } // cn.drawCoslor(Color.WHITE);//窗体会画白;之前画的图形会消失;(新建);
    ima.setImageBitmap(bt);
    break; } return true;// 返回值false,表示该方法执行失败,
    // 之前所有执行过的代码都将回滚。
    }
  8. 在xml 文件中设置菜单显示在窗体上<!-- android:showAsAction="always" 一直显示在窗体上 -->
  • 使用画笔和画布的时候应该注意:
  1. 画笔和画布设置颜色可以使用十六进制或者使用系统自带的颜色;
  2. 函数的不同:java中画点是利用画直线的方法,而android里面是有专门的方法:canvas.drawPoint((x3 + x), (y3 + y), paint);
  3. draw函数中的数值都是float型;
  4. 在画矩形的函数中
    void android.graphics.Canvas.drawRect(float left, float top, float right, float bottom, Paint paint):left是矩形左边的线,top是上面;right是右边,bottom是下面的线。
  5. 画图的抗锯齿效果:(1)对画笔进行抗锯齿:pain.setAlpha(50);  pain.setAntiAlias(true);// 改变锯齿状;(2)创建一个Paint滤波器。 PaintFlagsDrawFilter mSetfil = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG);  canvas.setDrawFilter( mSetfil ); 第一个参数是你要清除的标志位,第二个参数是你要设置的标志位。此处设置为对位图进行滤波;

  • 提示。点击按钮出现提示;显示一个消息提示框,
  1. Toast.makeText(ma, button.getText().toString(),Toast.LENGTH_SHORT).show();

android开发之画图版的更多相关文章

  1. Android开发学习——画横线竖线

    画横线/竖线 竖线 <View android:layout_width="1dp" android:layout_height="match_parent&quo ...

  2. Android简单开发的画画板

    Android开发画画板要考虑得几个问题如下: 1 屏幕画板.画笔如何绘制问题 2 用户手指触摸屏幕画板监听事件,以及对应的几种状态处理问题 3  保存图片到SD卡,以及在系统相册打开时自动加载刚才的 ...

  3. Android开发之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  4. Android开发之画图的实现

    Android开发之画图的实现    四天前上完安卓的第一节课,真的是一脸懵逼,尽管熊哥说和java是差不多的,然而这个包和那个包之间的那些转换都是些什么鬼呀!!!但是四天的学习和操作下来,我觉得安卓 ...

  5. Android开发能够帮你更好开发的19个开发工具

    要想快速开发一个Android应用,通常会用到很多工具,巧妙利用这些工具,能让我们的开发工作事半功倍,节省大量时间,下面大连Android开发培训小编就为大家介绍下这19个开发工具都有神马用途. 1. ...

  6. android开发之自定义组件

    android开发之自定义组件 一:自定义组件: 我认为,自定义组件就是android给我们提供的的一个空白的可以编辑的图片,它帮助我们实现的我们想要的界面,也就是通过自定义组件我们可以把我们要登入的 ...

  7. Android开发App工程结构搭建

    本文算是一篇漫谈,谈一谈关于android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构.      关于android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角 ...

  8. Android开发面试经——4.常见Android进阶笔试题(更新中...)

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  9. Android开发实例详解之IMF(Android SDK Sample—SoftKeyboard)

    本博前面的文章介绍了Android开发环境的搭建和模拟器的常用操作.本次,将以Android Sample中经典的SoftKeyboard项目为例,详细解析Android上一个小型项目的开发过程和注意 ...

随机推荐

  1. iOS多线程之NSOperation详解

    使用NSOperation和NSOperationQueue进行多线程开发,只要将一个NSOperation(实际开发中需要使用其子类 NSInvocationOperation,NSBlockOpe ...

  2. 一类有依赖的树形背包dp方法

    失踪人口回归系列 这个标题是不是看起来很厉害呢233 给一道例题:有一个树,每一个节点代表一个物品,每个物品有重量和价值,每个物品必须先选父亲才能选自己.求给定重量内最大价值. 这题的思路十分的厉害. ...

  3. WIN7下强制分第四个主分区的方法

    通过磁盘管理的界面方式, 第四个分区会被分成扩展分区, 建议通过命令行 打开命令行运行diskpart, list disk 会列出所有磁盘, 选择要操作的磁盘序号如1,select disk 1 如 ...

  4. 解决jquery.validate.js的验证bug

    版本提示:jq为1.4.4, jquery.validate 为jQuery validation plug-in 1.7 问题: a.选填选项,如邮箱设置格式验证,那么情况输入框,验证label变成 ...

  5. 搜索引擎关键词劫持之php篇(源码与分析)

    摘要:其实原理很简单: 搜索引擎关键词劫持的过程实际上就是,修改肉鸡站点(webshell站点)A的首页(希望被搜索引擎收录的页面,一般情况下是首页),使之做出如下判断: if(来访者是蜘蛛){ 输出 ...

  6. IE8和W3C标准下IFRAME刷新和URL的区别

    一个页面中包含了一个iframe,我们要刷新这个iframe的情况 url在IE8和W3C以及IE11的区别如下: URL使用相对路径,绝对路径比如http://localhost:5568/替换成I ...

  7. JAVA CDI 学习(3) - @Produces及@Disposes

    上一节学习了注入Bean的生命周期,今天再来看看另一个话题: Bean的生产(@Produces)及销毁(@Disposes),这有点象设计模式中的工厂模式.在正式学习这个之前,先来看一个场景: 基于 ...

  8. 【转】如何拿到半数面试公司Offer——我的Python求职之路

    原文地址 从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容 ...

  9. QTableView 一列添加两个按钮

    在QTableView的一列里添加两个按钮,之前添加一个按钮的思路是一样的,只是计算了一下按钮的宽,放两个按钮而已. 添加一个按钮的例子:QTableView 添加按钮 本例源代码:QtTowButt ...

  10. 判断Laravel Eloquent获取数据结果集是否为空

    在使用Laravel Eloquent模型时,我们可能要判断取出的结果集是否为空,但我们发现直接使用is_null或empty是无法判段它结果集是否为空的. var_dump之后我们很容易发现,即使取 ...