这里只做个汇总~。~独一无二


Android自定义View研究--View中的原点坐标相关问题

我们自定义了View,但是有没想过一个问题,就是View中的(0,0)坐标,也就是原点坐标在哪??我们是不是有时候很困惑,接下来我们就来研究View中的原点坐标相关的问题。

一、new DuView时View的原点

我们通过从View中绘制一条从原点到右下角的线来看看这个View中的原点和这个View的宽和高。这里我们从onDraw(Canvas canvas)中绘制,下面给出核心代码。

DuView.java

继承View

public class DuView extends View {

  1. /**
  2. * 定义一个画笔
  3. * */
  4. Paint paint;
  5.  
  6. /**
  7. * 绘制线的画笔
  8. * */
  9. Paint linePaint;
  10.  
  11. /**
  12. * 这个是我们要在Activity中初始化用的
  13. * */
  14. public HelloView(Context context){
  15. super(context);
  16. Log.v("HelloView(Context context)","" + this.getHeight()+ " " + this.getWidth());
  17. }
  18. /**
  19. * 这个是我们要在XML中初始化用的
  20. * */
  21. public HelloView(Context context,AttributeSet attrs){
  22. super(context, attrs);
  23. Log.v("HelloView(Context context,AttributeSet attrs)","" + this.getHeight()+ " " + this.getWidth());
  24. }
  25.  
  26. /**
  27. * 绘制View
  28. * */
  29. protected void onDraw(Canvas canvas){
  30. Log.v("onDraw(Canvas canvas)","" + this.getHeight()+ " " + this.getWidth());
  31. canvas.drawColor(Color.WHITE);
  32. initLinePaint(); // 初始化画笔
  33. myUseBitmapFactory(canvas);
  34. canvas.drawLine(0, 0, this.getWidth(), this.getHeight(), linePaint);
  35. }
  36.  
  37. @Override
  38. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  39. // TODO Auto-generated method stub
  40. super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  41. Log.v("onMeasure","" + this.getHeight()+ " " + this.getWidth());
  42. }
  43. /**
  44. * 初始化画笔
  45. * */
  46. public void intiPaint(){
  47. paint = new Paint();
  48. // 设置画笔
  49. paint.setColor(Color.GREEN); // 绿色画笔
  50. paint.setAntiAlias(true); // 打开抗锯齿
  51. paint.setTextSize(15); // 设置字体大小
  52. }
  53.  
  54. /**
  55. * 初始化绘制线的画笔
  56. * */
  57. public void initLinePaint(){
  58. linePaint = new Paint();
  59. // 设置画笔
  60. linePaint.setColor(Color.GREEN);
  61. linePaint.setAntiAlias(true);
  62. linePaint.setStrokeWidth(5); // 设置线宽
  63. }
  64.  
  65. // --> 使用BitmapFactory解析图片
  66. public void myUseBitmapFactory(Canvas canvas){
  67. // 定义画笔
  68. Paint paint = new Paint();
  69. // 获取资源流
  70. Resources rec = getResources();
  71. InputStream in = rec.openRawResource(R.drawable.haha);
  72. // 设置图片
  73. Bitmap bitmap =BitmapFactory.decodeStream(in);
  74. // 绘制图片
  75. canvas.drawBitmap(bitmap, 0, 20, paint);
  76. }
  77. // --> 使用BitmapDrawable解析图片
  78. public void myUseBitmapDrawable(Canvas canvas){
  79. // 定义画笔
  80. Paint paint = new Paint();
  81. // 获得资源
  82. Resources rec = getResources();
  83. // BitmapDrawable
  84. BitmapDrawable bitmapDrawable = (BitmapDrawable) rec.getDrawable(R.drawable.haha);
  85. // 得到Bitmap
  86. Bitmap bitmap = bitmapDrawable.getBitmap();
  87. // 在画板上绘制图片
  88. canvas.drawBitmap(bitmap, 20, 120,paint);
  89. }
  90. // --> 使用InputStream和BitmapDrawable解析图片
  91. public void myUseInputStreamandBitmapDrawable(Canvas canvas){
  92. // 定义画笔
  93. Paint paint = new Paint();
  94. // 获得资源
  95. Resources rec = getResources();
  96. // InputStream得到字符串
  97. InputStream in = rec.openRawResource(R.drawable.haha);
  98. // BitmapDrawable 解析数据流
  99. BitmapDrawable bitmapDrawable = new BitmapDrawable(in);
  100. // 得到图片
  101. Bitmap bitmap = bitmapDrawable.getBitmap();
  102. // 绘制图片
  103. canvas.drawBitmap(bitmap, 100, 100,paint);
  104. }

运行:

通过观察发现,View大小是从使用继承View的那个Label下开始

计算的,也就是这个View原点是在Label的左下角开始,到屏幕的右下角结束。

自己多试试,呵呵。

二、使用XML中布局文件时的View原点。

修改布局:

MainActivity.java

/**

* 使用自定义的View

* */

public class MainActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);// 使用自定义的View

}

}

这里直接给出运行结果图:

结束!

!。!

需要源码的留个邮箱~。~~。~

文章出处:http://blog.csdn.net/djy1992/article/details/9715047

------------

Android自定义View研究(七)--XML中布局自定义View时View触摸原点问题

在XML中布局时,我们自定义的View的触摸原点在哪??这又是一个问题啊,学习的过程就是不断发现问题,解决问题的过程。呵呵,相信大家都是深有体会吧,这次我们研究View的触摸原点问题。

下面是核心代码:

/**

*定义手势识别

**/

GestureDetector mGestureDetector;

/**

*注册手势识别,当然这个要在构造里初始化一下

**/

publicvoid myEvent(){

mGestureDetector = new GestureDetector(

new GestureDetector.SimpleOnGestureListener(){

publicboolean onSingleTapUp(MotionEvent e){

Log.v("onTouchEvent"," e.getX():" + e.getX()+ "   e.getY():"+ e.getY());

returntrue;

}

});

}

/**

*响应触摸屏

**/

publicboolean onTouchEvent(MotionEvent event) {

mGestureDetector.onTouchEvent(event);

returntrue;

}

运行一下:

下面是点击的示意图:

点击后查看log

需要源码的留个邮箱~。~~。~

放外链太麻烦~

文章出处:http://blog.csdn.net/djy1992/article/details/9715047

Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题的更多相关文章

  1. Android自己定义控件而且使其能够在xml中自己定义属性

    为什么要自己定义View android开发中自己定义View的优点是显而易见的.比方说以下的这个顶部导航,它被设计出如今应用的每一个界面,但每次的内容却不尽同样.我们不能在每一个layout资源中都 ...

  2. iOS 屏幕原点坐标 && 导航栏风格的自定义

    其一 屏幕原点坐标 (x ,y) 受 self.navigationController. navigationBar 的 setTranslucent (BOOL) 属性控制 在 iOS7 以后   ...

  3. java web开发中的奇葩事web.xml中context-param中的注释

    同事提交了代码.结果除同事之外,其他人全部编译报错.报错说web.xml中配置的一个bean 没有定义.按照报错提示,各种找,无果. 由于代码全部都是提交到svn主干,之前也没有做过备份,只能一步一步 ...

  4. .net中使用XPath语言在xml中判断是否存在节点值的方法

    book.xml<?xml version="1.0" encoding="utf-8" ?> <bookstore>  <boo ...

  5. android xml中使用include标签

    在一个项目中,我们可能会在xml中局部用到相同的布局,如果每次都在xml中重写这些布局,代码显得很冗余.重复的复制黏贴也很烦恼,所以,我们把这些相同的局部布局写成一个单独的xml模块,需要用到这些布局 ...

  6. 第三部分:Android 应用程序接口指南---第二节:UI---第一章 用户界面和布局

    第1章 用户界面和布局 应用程序的用户界面就是用户能看到并可以与它交互的任何东西.Android提供多种预置的UI组件,如结构化布局对象和允许你为应用程序创建图形用户界面的UI控件.Android也会 ...

  7. 详解web.xml中元素的加载顺序

    一.背景 最近在项目中遇到了启动时出现加载service注解注入失败的问题,后来经过不懈努力发现了是因为web.xml配置文件中的元素加载顺序导致的,那么就抽空研究了以下tomcat在启动时web.x ...

  8. web.xml中init-param中的param-name

    转载自:http://www.cnblogs.com/hzj-/articles/1689836.html <context-param>的作用:web.xml的配置中<contex ...

  9. xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)

    项目中,经常会在xml中看到这样的写法: <properties resource="properties/database.properties"/> <dat ...

随机推荐

  1. Magnolia-CMS安装配置

    Magnolia-CMS安装配置 Magnolia-CMS安装配置 介绍:Magnolia 是一个开源基于Java的Web内容管理系统(CMS),构建在Java内容知识库标准(JSR-170).它适合 ...

  2. 设置php在apache下加载ini配置文件路径,~和curl扩展无法加载的问题

    php以模块的方式加载到apache的时候,php配置文件目录为C:windows.这不合理,应该选择php本身目录的配置文件加载,可以在apache的httpd.conf配置文件里设置PHPIniD ...

  3. CI的扩展机制

    CI的扩展机制 在熟悉了CI的源码之后,它的简单明了的代码风格很有趣,这篇文章看看在CI是如何实现扩展的. 扩展包 扩展是为了完成特定的功能,在CI中,扩展包的开发只能在application/lib ...

  4. 写给初学者css优先级问题

    首先需要搞清楚几个基本概念 1.内嵌样式: 写在元素标签内的例如:<div style="background-color:red"> </div> 2.内 ...

  5. 文本导出到pdf文件

    程序中数据导出是经常有的需求,今天学习把文本导出到pdf文件.主要是用QPrinter,QPainter TextEditToPdf::TextEditToPdf(QWidget *parent, Q ...

  6. Ribbon Gymnastics

    Robert is a gymnastics coach. Unfortunately, he got four gymnastics beginners to attend the coming c ...

  7. 克鲁斯卡尔(Kruskal)算法

    # include <stdio.h> # define MAX_VERTEXES //最大顶点数 # define MAXEDGE //边集数组最大值 # define INFINITY ...

  8. Trafic control 大框图(HTB )

    10.1. General diagram Below is a general diagram of the relationships of the components of a classfu ...

  9. SEO人员应该突破的5大思想误区

    1.外链误区 很多人在做网站优化的时候容易陷入外链怪圈,认为外链就是网站优化的一切,只要做好外链排名就会上去,让他不做外链了他将不知道做什么.特别是外链专员和一些初级SEO人员,优化网站只知道到哪里发 ...

  10. 轻量级C语言实现的minixml解析库入门教程

    svn上的minixml源码下载.  svn co http://svn.msweet.org/mxml/tags/release-2.7/ 按照下载回来的源代码进行编译和安装.本教程只针对新手做一个 ...