Android\OPhone自定义视图(View)

简介:

最经在Android上作游戏居多了,在Android平台做游戏和做应用少有少许的不同,做游戏就会更多的使用自定义视图了,有很多东西需要我们自己去实现,就不像做应用,用得最多的就是Android系统的一些组件,当然偶尔也会涉及到自定义一些界面,但是这些自定义界面都是使用系统的一些组件来组合完成了,而游戏不同了,游戏在图形的处理上要求会更多,这时,自定义视图就派上用场了。

说老实话,做了几个游戏出来之后,才发现,以前要实现某个功能会经过很多的步骤并且很复杂,在Android就可以很轻松的解决,比如最简单的一个渐变色的处理,要是在J2ME上计算就会多很多,在Android就需要定义一个shape的XML文件即可,同时还可以利用shape来绘制一些基本的图形(有机会右面会介绍这个shape),甚至代替很多图片内容,这样既节省了空间,又提高了效率,为什么不好呢?Android真的很强大,主要是很灵活,我们可以用很多方法去实现某个功能。

好了,又废话了这么多,下面进入正题。

我们都知道Android的UI,都是基于View和ViewGroup以及一些子类,比如layout等等,所以我们在自定义视图时就需要将自定义的类继承自这个类。

首先我们需要在values目录下建立一个attrs.xml文件,来定义我们在自定义视图中需要使用的一些资源,比如:背景、字体大小、字体等等。代码如下:


 
 
  1. <?xml version="1.0" encoding="utf-8"?>     
  2. <resources>     
  3. <declare-styleable name="TestView">     
  4. <attr name="textColor" format="color" />     
  5. <attr name="textSize" format="dimension" />     
  6. <attr name="backGround" format="integer" />     
  7. </declare-styleable>     
  8. </resources>  

上面的代码很好理解,我们将自定义的试图名定位TestView,其中包括了字体颜色(textColor),字体尺寸(textSize)以及背景(backGround)。
接下来我们就需要建立一个类TestView,继承自View了。 
代码如下(代码加入了注释,这里就不多说了):


 
 
  1. package com.yarin.Android.Test;     
  2.     
  3. import android.content.Context;     
  4. import android.content.res.TypedArray;     
  5. import android.graphics.Canvas;     
  6. import android.graphics.Paint;     
  7. import android.util.AttributeSet;     
  8. import android.view.View;     
  9.     
  10. public class TestView extends View     
  11. {     
  12.     private Paint   mPaint      = null;     
  13.     
  14.     private Context     mContext    = null;     
  15.     
  16.     /**    
  17.      *  mTestView = new TestView(this);    
  18.      *  setContentView(mTestView);    
  19.      *  如果在Activity中这样写,那么就需要实现这个构造函数    
  20.      */    
  21.     public TestView(Context context)     
  22.     {     
  23.         super(context);     
  24.              
  25.         mContext = context;     
  26.         mPaint = new Paint();     
  27.     }     
  28.          
  29.     /**    
  30.      *  setContentView(R.layout.main);    
  31.      *  mTestView = (TestView)findViewById(R.id.mTestView);    
  32.      *  如果在Activity中这样写,那么就需要实现这个构造函数    
  33.      */    
  34.     public TestView(Context context, AttributeSet attrs)     
  35.     {     
  36.         super(context, attrs);     
  37.              
  38.         mContext = context;     
  39.     
  40.         mPaint = new Paint();     
  41.              
  42.         TypedArray params = context.obtainStyledAttributes(attrs,R.styleable.TestView);     
  43.         //取得xml布局文件中所定义的背景     
  44.         int backgroudId = params.getResourceId(R.styleable.TestView_backGround,0);     
  45.         if (backgroudId != 0)      
  46.         {     
  47.             setBackgroundResource(backgroudId);     
  48.         }     
  49.         //字体颜色     
  50.         int textColor = params.getColor(R.styleable.TestView_textColor,0XFFFFFFFF);     
  51.         mPaint.setColor(textColor);     
  52.         //字体大小     
  53.         float textSize = params.getDimension(R.styleable.TestView_textSize, 20);     
  54.         mPaint.setTextSize(textSize);     
  55.     }     
  56.     protected void onDraw(Canvas canvas)      
  57.     {     
  58.         super.onDraw(canvas);     
  59.     
  60.         //测试绘制一个矩形     
  61.         canvas.drawRect(30508090, mPaint);     
  62.         //绘制一个字符串     
  63.         canvas.drawText("测试字符串"50150, mPaint);     
  64.     }     
  65. }  

接下来,我们需要在main.xml中来修改加入自定义视图了,修改如下:


 
 
  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <LinearLayout      
  3.     xmlns:android="http://schemas.android.com/apk/res/android"    
  4.     xmlns:test="http://schemas.android.com/apk/res/com.yarin.Android.Test"    
  5.     android:orientation="vertical"    
  6.     android:layout_width="fill_parent"    
  7.     android:layout_height="fill_parent"    
  8.     >    
  9. <TextView       
  10.     android:layout_width="fill_parent"      
  11.     android:layout_height="wrap_content"      
  12.     android:text="@string/hello"    
  13.     />    
  14.     <!-- 自定义视图      
  15.     注意这里是如何来申明自定义视图中的字体颜色、字体大小、背景的,     
  16.     在线性布局中不要忘记“xmlns:test="http://schemas.android.com/apk/res/com.yarin.Android.Test”     
  17.     -->    
  18. <com.yarin.Android.Test.TestView      
  19.     android:id="@+id/mTestView"    
  20.     android:layout_width="fill_parent"      
  21.     android:layout_height="fill_parent"    
  22.     test:textColor="#FFFFFFFF"      
  23.     test:textSize="25dip"    
  24.     test:backGround="@drawable/bg"    
  25. />    
  26. </LinearLayout>  

最后在Activity中,不管我们采用下面那一种方式来写都可以了:


 
 
  1. //mTestView = new TestView(this);     
  2. //setContentView(mTestView);     
  3.              
  4. setContentView(R.layout.main);     
  5. mTestView = (TestView)findViewById(R.id.mTestView);   

大家可以从代码看出,我们在屏幕上绘制了一个矩形和一个字符串做测试。效果如下(这个效果是在OPhone1.0上测试的):

也没什么多说的,网络上已经早已有方法你来讲解了,就算自己作个记录吧,能帮助到某个朋友,当然很高兴,下面是Eclipse工程文件。   

需要说明一下,3D的应用时不能这样的,3D需要使用SurfaceView来实现,后面有时间在介绍。最后总结一点经验,Android上开发应用,最主要的就是UI界面的布局,其他的都好解决,正在努力想UI的布局有没有更好的方式。

谢谢大家支持。




本文转自 yarin 51CTO博客,原文链接:http://blog.51cto.com/yarin/381936,如需转载请自行联系原作者

相关文章
|
2月前
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
38 1
|
2月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
1月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
57 19
|
1月前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
2月前
|
搜索推荐 前端开发 Android开发
安卓开发中的自定义视图——打造个性化用户界面
在安卓应用开发的广阔天地里,自定义视图是实现个性化界面设计的重要手段。通过深入理解安卓绘图基础、触摸事件处理和布局机制,开发者可以突破标准控件的限制,创造出独一无二的用户体验。本文将引导你探索自定义视图的核心概念,提供实用的代码示例,并分享如何有效地解决开发过程中可能遇到的挑战。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创新和个性化的大门。
|
2月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
49 2
|
2月前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
2月前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
46 5
|
3月前
|
缓存 数据处理 Android开发
在 Android 中使用 RxJava 更新 View
【10月更文挑战第20天】使用 RxJava 来更新 View 可以提供更优雅、更高效的解决方案。通过合理地运用操作符和订阅机制,我们能够轻松地处理异步数据并在主线程中进行 View 的更新。在实际应用中,需要根据具体情况进行灵活运用,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在 Android 中使用 RxJava 更新 View 的技巧和方法,为开发高质量的 Android 应用提供有力支持。
|
3月前
|
缓存 调度 Android开发
Android 在子线程更新 View
【10月更文挑战第21天】在 Android 开发中,虽然不能直接在子线程更新 View,但通过使用 Handler、AsyncTask 或 RxJava 等方法,可以实现子线程操作并在主线程更新 View 的目的。在实际应用中,需要根据具体情况选择合适的方法,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在子线程更新 View 的技巧和方法,为开发高质量的 Android 应用提供支持。
53 2