android 自定义View研究(一)

来源:互联网 发布:武汉淘宝运营招聘 编辑:程序博客网 时间:2024/05/22 02:05

对于一个手机的用户体验来说最重要的部分莫过于界面了,为此Android中提供了通过XML布局的方式来进行布局,各种布局方式和控件的使用就不多说了,如果有不会的可以参考下这个一个Demo让你掌握所有的控件。对于布局来说,个人感觉只用XML布局会有一定的局限性。所以就有了通过继承View以及其他控件来实现的Android布局。


首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口。

Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。
Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。
Canvas - 名为画布,我们可以看作是一种处理过程,使用各种方法来管理Bitmap、GL或者Path路径,同时它可以配合Matrix矩阵类给图像做旋转、缩放等操作,同时Canvas类还提供了裁剪、选取等操作。
Paint - 我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。


下面通过一个简单例子来演示一下


activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <com.example.customview01.MyView        android:layout_width="wrap_content"        android:layout_height="wrap_content"/></RelativeLayout>


MainActivity.java

package com.example.customview01;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}


自定义MyView.java

package com.example.customview01;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;public class MyView extends View {private Paint mPaint; //画笔,包含了画几何图形、文本等的样式和颜色信息  public MyView(Context context) {super(context);// TODO Auto-generated constructor stub}public MyView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mPaint = new Paint();mPaint.setColor(Color.RED);//设置画笔的颜色canvas.drawRect(0, 0, 300, 300, mPaint);mPaint.setColor(Color.GREEN);//mPaint.setColor(Color.parseColor("#868686"));mPaint.setAntiAlias(true);mPaint.setTextSize(30);canvas.drawText("第一次使用画笔", 50, 150, mPaint);}}


运行效果图:







原创粉丝点击