Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 这里只做个汇总~。~独一无二 文章出处:http://blog.csdn.net/djy1992/article/details/9715047 Android自定义View研究--View中的原点坐标相关问题 我们自定义了View,但是有没想过一个问题,就是View中的(0,0)坐标,也就是原点坐标在哪??我们是不是有时候很困惑,接下来我们就来研究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

 

 

 

 

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

放外链太麻烦~

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


相关文章
|
2月前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
16天前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
41 10
|
21天前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
30 3
|
22天前
|
前端开发 Android开发 开发者
安卓应用开发中的自定义视图基础
【9月更文挑战第13天】在安卓开发的广阔天地中,自定义视图是一块神奇的画布,它允许开发者将想象力转化为用户界面的创新元素。本文将带你一探究竟,了解如何从零开始构建自定义视图,包括绘图基础、触摸事件处理,以及性能优化的实用技巧。无论你是想提升应用的视觉吸引力,还是追求更流畅的交互体验,这里都有你需要的金钥匙。
|
25天前
|
缓存 搜索推荐 Android开发
安卓应用开发中的自定义View组件实践
【9月更文挑战第10天】在安卓开发领域,自定义View是提升用户体验和实现界面个性化的重要手段。本文将通过一个实际案例,展示如何在安卓项目中创建和使用自定义View组件,包括设计思路、实现步骤以及可能遇到的问题和解决方案。文章不仅提供了代码示例,还深入探讨了自定义View的性能优化技巧,旨在帮助开发者更好地掌握这一技能。
|
2月前
|
XML 搜索推荐 Android开发
安卓开发中的自定义View组件实践
【8月更文挑战第30天】探索Android世界,自定义View是提升应用界面的关键。本文以简洁的语言带你了解如何创建自定义View,从基础到高级技巧,一步步打造个性化的UI组件。
|
29天前
|
前端开发 搜索推荐 Android开发
探索安卓开发中的自定义视图##
【9月更文挑战第6天】 在安卓应用开发的世界里,自定义视图如同绘画艺术中的色彩,它们为界面设计增添了无限可能。通过掌握自定义视图的绘制技巧,开发者能够创造出既符合品牌形象又提升用户体验的独特界面元素。本文将深入浅出地介绍如何从零开始构建一个自定义视图,包括基础框架搭建、关键绘图方法实现、事件处理机制以及性能优化策略。准备好让你的安卓应用与众不同了吗?让我们开始吧! ##
|
2月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
4月前
|
XML Java 数据格式
java创建xml文件内容
java创建xml文件内容
|
4月前
|
XML Java 数据格式
java解析xml文件内容
java解析xml文件内容