效果图:

Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成的。View是所有UI组件的基类(父类),为ViewGroup类是容纳这些UI组件的容器,其本身也是View的子类。

关系:
           ViewGroup
        |                 |              |
        |                 |              |
  ViewGroup   View   View
      |          |
      |          |      
   View View

一般情况下,开发Android应用程序的UI界面,都不直接使用View和ViewGroup类,而是使用它们的子类。
例如,显示一张图片,就可以使用View类的字类ImageView。

用户可以通过继承View来开发自己的组件。
开发自定义的View组件大致分一下3个步骤:
1.创建一个继承android.view.View类的View类,并且重写构造方法
2.根据需要重写相应方法。(Eclipse"源代码" -"覆盖/实现方法")
3.在项目的活动中,创建并实例化自定义View类,并将其添加到自定义管理器中。

下面利用自定义View来做一个拥有可以用手指触摸游走的小兔子界面

res/layout/main.xml:

<FrameLayout 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"android:background="@drawable/backgroud"android:id="@+id/mylayout"></FrameLayout>

在res/drawable/下放置rabbit.png的小兔子图片和backgroud.jpg大草原背景图片

RabbitView:

package com.example.test;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;//显示一个可以用手拖拉的小兔子的界面
public class RabbitView extends View {public float bitmapX;//小兔子显示位置的X坐标public float bitmapY;//小兔子显示位置的Y坐标public RabbitView(Context context) {super(context);bitmapX=50;//设置小兔子默认显示位置的X坐标bitmapY=75;//设置小兔子默认显示位置的Y坐标}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//创建并实例化Paint的对象Paint paint=new Paint();//根据图片生成位图对象Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.rabbit);canvas.drawBitmap(bitmap, bitmapX, bitmapY,paint);//绘制小兔子if(bitmap.isRecycled()){//判断图片是否回收bitmap.recycle();//强制回收图片}}
}

MainActivity:

package com.example.test;import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//获取帧布局管理器FrameLayout layout=(FrameLayout)findViewById(R.id.mylayout);//创建并实例化RabbitView类final RabbitView rabbit=new RabbitView(MainActivity.this);//为小兔子添加触摸时间监听器rabbit.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {rabbit.bitmapX=event.getX();//设置小兔子显示位置的X坐标rabbit.bitmapY=event.getY();//设置小兔子显示位置的Y坐标rabbit.invalidate();//重绘rabbit组件return true;}});layout.addView(rabbit);//将rabbit添加到布局管理器中}
}

运行效果如上图,可以任意拖拉小兔子至任何位置

转载请注明出处:http://blog.csdn.net/acmman/article/details/44727901

【Android开发】用户界面设计-开发自定义的View相关推荐

  1. Android studio课程设计开发实现---日记APP

    Android studio课程设计开发实现-日记APP 文章目录 Android studio课程设计开发实现---日记APP 前言 一.效果 二.功能介绍 1.主要功能 2.涉及知识点 三.实现思 ...

  2. Android课程表的设计开发

    Android课程表的设计开发 下载链接 鉴于很多人需要源码,这里给下代码. 下载地址(需要5积分,支持下(积累点积分...),没有积分的直接留言邮箱,我发给你或者找其他已经发过的人要下) 没积分的直 ...

  3. android支付界面设计,Android支付宝支付设计开发

    在移动支付领域,支付宝支付占用巨大份额,根据艾瑞咨询公布的报告数据:2014Q3,支付宝斩获了82.6%的市场份额,在移动支付的霸主地位越来越稳固.财付通支付的发力点在微信支付和手Q支付,在移动支付格 ...

  4. android tv盒子 主界面,设计规范 | 详解Android TV用户界面设计

    文章对比电视界面,从主屏幕和应用程序两个方面对Android TV的用户界面设计进行了详细梳理,与大家分享. 与移动端设备不同,用户一般在3米外使用电视.因此电视界面设计上需要大而漂亮,要有合适的布局 ...

  5. Android开发——如何设计开发一款Android App

    本文从开发工具选择,UI界面.图片模块.网络模块.数据库产品选择.性能.安全性等几个方面讲述了如果开发一个Android应用.现在整理出来分享给广大的Android程序员兄弟们. 开发工具的选择 开发 ...

  6. Android导航软件设计开发,基于Android平台的手机导航系统的设计与实现

    摘要: 互联网和移动智能技术的快速发展,平板电脑,智能手机,已经走进我们生活的方方面面,购物.外卖.租房.工作.旅游,医疗各个行业.我们无时无刻不在享受互联网和移动终端带来的便利.GPS全球卫星定位带 ...

  7. Android:手把手教你自定义头像View,可根据名字自动生成背景色+文字的显示效果,含动画效果。

    首先看需要做成的效果,如下所示

  8. oracle窗帘位图索引,Greenplum数据库设计开发规范参考.docx

    Greenplum数据库设计开发规范参考 Greenplum数据库设计开发规范参考文档2016年7月目 录Greenplum数据库设计开发规范1V1.511 前言41.1 文档目的41.2 文档范围4 ...

  9. 关于Android的一些设计

    谈到应用程序设计,对设计师来说,Android就像是房间里的大象.很多设计师会更希望这是iOS,在那里所有任何人都只需要关心iPhone手机,iPad和App Store.然后没有人可以忽略Andro ...

最新文章

  1. SAP SD基础知识之自动信用控制
  2. python requests下载文件很慢-python requests 下载大文件不完整
  3. Centos配置nginx反向代理8080端口到80端口
  4. Deno 并不是下一代 Node.js
  5. ASP.NET MVC API 接口验证
  6. 15 函数回调 模块
  7. Java多线程-程序运行堆栈分析
  8. TVS 击穿电压和钳位电压的区别
  9. leetcode :string字符串和数字
  10. python 创建随机数专题
  11. 如何在C#窗体中定义全局变量
  12. Web前端工程师常用的8个工具
  13. 人工智能 ppt_我体验了下人工智能PPT制作平台,这6个功能让我惊喜!
  14. 使用UE4开发VR项目_性能优化(二)_思路和方法
  15. el-tree处理大量数据
  16. 销售使用企业微信SCRM管理系统有什么好处
  17. 小白Java学习之路(abstract抽象类,final,接口,equals)
  18. composer类库—汉字转拼音
  19. 工作日志2009年、二
  20. 苹果树——1976 至 2011 苹果产品回顾

热门文章

  1. OpenCV:使用 随机森林与GBDT
  2. 关于Android软件更新
  3. laravel进阶系列--通过事件和事件监听实现服务解耦
  4. MySQL成勒索新目标,数据服务基线安全问题迫在眉睫
  5. 【高可用HA】Apache (2) —— Mac下安装多个Apache Tomcat实例
  6. DHCP Option 60 的理解
  7. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)...
  8. Linux Shell特殊字符和控制字符
  9. 纽约时报:安全问题将毁掉整个互联网
  10. <scope>test</scope>的作用