Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题
这里只做个汇总~。~独一无二
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 {
- /**
- * 定义一个画笔
- * */
- Paint paint;
- /**
- * 绘制线的画笔
- * */
- Paint linePaint;
- /**
- * 这个是我们要在Activity中初始化用的
- * */
- public HelloView(Context context){
- super(context);
- Log.v("HelloView(Context context)","" + this.getHeight()+ " " + this.getWidth());
- }
- /**
- * 这个是我们要在XML中初始化用的
- * */
- public HelloView(Context context,AttributeSet attrs){
- super(context, attrs);
- Log.v("HelloView(Context context,AttributeSet attrs)","" + this.getHeight()+ " " + this.getWidth());
- }
- /**
- * 绘制View
- * */
- protected void onDraw(Canvas canvas){
- Log.v("onDraw(Canvas canvas)","" + this.getHeight()+ " " + this.getWidth());
- canvas.drawColor(Color.WHITE);
- initLinePaint(); // 初始化画笔
- myUseBitmapFactory(canvas);
- canvas.drawLine(0, 0, this.getWidth(), this.getHeight(), linePaint);
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- // TODO Auto-generated method stub
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- Log.v("onMeasure","" + this.getHeight()+ " " + this.getWidth());
- }
- /**
- * 初始化画笔
- * */
- public void intiPaint(){
- paint = new Paint();
- // 设置画笔
- paint.setColor(Color.GREEN); // 绿色画笔
- paint.setAntiAlias(true); // 打开抗锯齿
- paint.setTextSize(15); // 设置字体大小
- }
- /**
- * 初始化绘制线的画笔
- * */
- public void initLinePaint(){
- linePaint = new Paint();
- // 设置画笔
- linePaint.setColor(Color.GREEN);
- linePaint.setAntiAlias(true);
- linePaint.setStrokeWidth(5); // 设置线宽
- }
- // --> 使用BitmapFactory解析图片
- public void myUseBitmapFactory(Canvas canvas){
- // 定义画笔
- Paint paint = new Paint();
- // 获取资源流
- Resources rec = getResources();
- InputStream in = rec.openRawResource(R.drawable.haha);
- // 设置图片
- Bitmap bitmap =BitmapFactory.decodeStream(in);
- // 绘制图片
- canvas.drawBitmap(bitmap, 0, 20, paint);
- }
- // --> 使用BitmapDrawable解析图片
- public void myUseBitmapDrawable(Canvas canvas){
- // 定义画笔
- Paint paint = new Paint();
- // 获得资源
- Resources rec = getResources();
- // BitmapDrawable
- BitmapDrawable bitmapDrawable = (BitmapDrawable) rec.getDrawable(R.drawable.haha);
- // 得到Bitmap
- Bitmap bitmap = bitmapDrawable.getBitmap();
- // 在画板上绘制图片
- canvas.drawBitmap(bitmap, 20, 120,paint);
- }
- // --> 使用InputStream和BitmapDrawable解析图片
- public void myUseInputStreamandBitmapDrawable(Canvas canvas){
- // 定义画笔
- Paint paint = new Paint();
- // 获得资源
- Resources rec = getResources();
- // InputStream得到字符串
- InputStream in = rec.openRawResource(R.drawable.haha);
- // BitmapDrawable 解析数据流
- BitmapDrawable bitmapDrawable = new BitmapDrawable(in);
- // 得到图片
- Bitmap bitmap = bitmapDrawable.getBitmap();
- // 绘制图片
- canvas.drawBitmap(bitmap, 100, 100,paint);
- }
}
运行:
通过观察发现,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
需要源码的留个邮箱~。~~。~
放外链太麻烦~
Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题的更多相关文章
- Android自己定义控件而且使其能够在xml中自己定义属性
为什么要自己定义View android开发中自己定义View的优点是显而易见的.比方说以下的这个顶部导航,它被设计出如今应用的每一个界面,但每次的内容却不尽同样.我们不能在每一个layout资源中都 ...
- iOS 屏幕原点坐标 && 导航栏风格的自定义
其一 屏幕原点坐标 (x ,y) 受 self.navigationController. navigationBar 的 setTranslucent (BOOL) 属性控制 在 iOS7 以后 ...
- java web开发中的奇葩事web.xml中context-param中的注释
同事提交了代码.结果除同事之外,其他人全部编译报错.报错说web.xml中配置的一个bean 没有定义.按照报错提示,各种找,无果. 由于代码全部都是提交到svn主干,之前也没有做过备份,只能一步一步 ...
- .net中使用XPath语言在xml中判断是否存在节点值的方法
book.xml<?xml version="1.0" encoding="utf-8" ?> <bookstore> <boo ...
- android xml中使用include标签
在一个项目中,我们可能会在xml中局部用到相同的布局,如果每次都在xml中重写这些布局,代码显得很冗余.重复的复制黏贴也很烦恼,所以,我们把这些相同的局部布局写成一个单独的xml模块,需要用到这些布局 ...
- 第三部分:Android 应用程序接口指南---第二节:UI---第一章 用户界面和布局
第1章 用户界面和布局 应用程序的用户界面就是用户能看到并可以与它交互的任何东西.Android提供多种预置的UI组件,如结构化布局对象和允许你为应用程序创建图形用户界面的UI控件.Android也会 ...
- 详解web.xml中元素的加载顺序
一.背景 最近在项目中遇到了启动时出现加载service注解注入失败的问题,后来经过不懈努力发现了是因为web.xml配置文件中的元素加载顺序导致的,那么就抽空研究了以下tomcat在启动时web.x ...
- web.xml中init-param中的param-name
转载自:http://www.cnblogs.com/hzj-/articles/1689836.html <context-param>的作用:web.xml的配置中<contex ...
- xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)
项目中,经常会在xml中看到这样的写法: <properties resource="properties/database.properties"/> <dat ...
随机推荐
- Magnolia-CMS安装配置
Magnolia-CMS安装配置 Magnolia-CMS安装配置 介绍:Magnolia 是一个开源基于Java的Web内容管理系统(CMS),构建在Java内容知识库标准(JSR-170).它适合 ...
- 设置php在apache下加载ini配置文件路径,~和curl扩展无法加载的问题
php以模块的方式加载到apache的时候,php配置文件目录为C:windows.这不合理,应该选择php本身目录的配置文件加载,可以在apache的httpd.conf配置文件里设置PHPIniD ...
- CI的扩展机制
CI的扩展机制 在熟悉了CI的源码之后,它的简单明了的代码风格很有趣,这篇文章看看在CI是如何实现扩展的. 扩展包 扩展是为了完成特定的功能,在CI中,扩展包的开发只能在application/lib ...
- 写给初学者css优先级问题
首先需要搞清楚几个基本概念 1.内嵌样式: 写在元素标签内的例如:<div style="background-color:red"> </div> 2.内 ...
- 文本导出到pdf文件
程序中数据导出是经常有的需求,今天学习把文本导出到pdf文件.主要是用QPrinter,QPainter TextEditToPdf::TextEditToPdf(QWidget *parent, Q ...
- Ribbon Gymnastics
Robert is a gymnastics coach. Unfortunately, he got four gymnastics beginners to attend the coming c ...
- 克鲁斯卡尔(Kruskal)算法
# include <stdio.h> # define MAX_VERTEXES //最大顶点数 # define MAXEDGE //边集数组最大值 # define INFINITY ...
- Trafic control 大框图(HTB )
10.1. General diagram Below is a general diagram of the relationships of the components of a classfu ...
- SEO人员应该突破的5大思想误区
1.外链误区 很多人在做网站优化的时候容易陷入外链怪圈,认为外链就是网站优化的一切,只要做好外链排名就会上去,让他不做外链了他将不知道做什么.特别是外链专员和一些初级SEO人员,优化网站只知道到哪里发 ...
- 轻量级C语言实现的minixml解析库入门教程
svn上的minixml源码下载. svn co http://svn.msweet.org/mxml/tags/release-2.7/ 按照下载回来的源代码进行编译和安装.本教程只针对新手做一个 ...