一、通过View实现自定义视图

通过构造函数创建可视界面

public class MyView extends View {

// Constructor required for in-code creation
  public MyView(Context context) {
    super(context);
  }

// Constructor required for inflation from resource file
  public MyView (Context context, AttributeSet ats, int defaultStyle) {
    super(context, ats, defaultStyle );
  }

//Constructor required for inflation from resource file
  public MyView (Context context, AttributeSet attrs) {
    super(context, attrs);
  }

通过onDraw()绘制控件。(注意其参数为一个Canvas对象)

@Override
protected void onDraw(Canvas canvas) {
   // Get the size of the control based on the last call to onMeasure.
   int height = getMeasuredHeight();
   int width = getMeasuredWidth();

// Find the center
   int px = width/2;
   int py = height/2;

// Create the new paint brushes.
   // NOTE: For efficiency this should be done in
   // the views's constructor
   Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
   mTextPaint.setColor(Color.WHITE);

// Define the string.
   String displayText = "Hello World!";

// Measure the width of the text string.
   float textWidth = mTextPaint.measureText(displayText);

// Draw the text string in the center of the control.
   canvas.drawText(displayText, px-textWidth/2, py, mTextPaint);
}

通过onMeasure()调整控件大小

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   int measuredHeight = measureHeight(heightMeasureSpec);
   int measuredWidth = measureWidth(widthMeasureSpec);

setMeasuredDimension(measuredHeight, measuredWidth);
}

private int measureHeight(int measureSpec) {
   int specMode = MeasureSpec.getMode(measureSpec);
   int specSize = MeasureSpec.getSize(measureSpec);

//  Default size if no limits are specified.
   int result = 500;

if (specMode == MeasureSpec.AT_MOST) {
     // Calculate the ideal size of your
     // control within this maximum size.
     // If your control fills the available
     // space return the outer bound.
     result = specSize;
   } else if (specMode == MeasureSpec.EXACTLY) {
     // If your control can fit within these bounds return that value.
     result = specSize;
   }
   return result;
}

处理用户交互事件

使用自定义控件

<com.paad.compass.CompassView/>

二、Adapter简介

Adapter实现了数据绑定到扩展了AdapterView的试图组GroupView.Adapter负责创建被绑定groupView的子视图。

public class MyArrayAdapter extends ArrayAdapter<MyClass> {

int resource;

public MyArrayAdapter(Context context,
                         int _resource,
                         List<MyClass> items) {
    super(context, _resource, items);
    resource = _resource;
  }

ArrayAdapter<MyClass>中的MyClass和构造函数的泛型的类型一致。

Context通常是被绑定的对象,_resource是子视图。items是将要用到的泛型数据。

另外一个比较主要的是getView覆盖方法

public View getView(int position, View convertView, ViewGroup parent) {
   LinearLayout todoView;//第n个项的载体

ToDoItem item = getItem(position);//得到第n个项

String taskString = item.getTask();
   Date createdDate = item.getCreated();
   SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
   String dateString = sdf.format(createdDate);

if (convertView == null) {
     todoView = new LinearLayout(getContext());
     String inflater = Context.LAYOUT_INFLATER_SERVICE;
     LayoutInflater li;
     li = (LayoutInflater)getContext().getSystemService(inflater);
     li.inflate(resource, todoView, true);
   } else {
     todoView = (LinearLayout) convertView;
   }

TextView dateView = (TextView)todoView.findViewById(R.id.rowDate);
   TextView taskView = (TextView)todoView.findViewById(R.id.row);

dateView.setText(dateString);
   taskView.setText(taskString);

return todoView;
}

具体的LinearLayout 还有待考证

andriod自定义视图的更多相关文章

  1. 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  2. Android中的自定义视图控件

    简介 当现有控件不能满足需求时,就需要自定义控件. 自定义控件属性 自定义控件首先要继承自View,重写两个构造函数. 第一个是代码中使用的: public MyRect(Context contex ...

  3. 自定义视图引擎,实现MVC主题快速切换

    一个网站的主题包括布局,色调,内容展示等,每种主题在某些方面应该或多或少不一样的,否则就不能称之为不同的主题了.每一个网站至少都有一个主题,我这里称之为默认主题,也就是我们平常开发设计网站时的一个固定 ...

  4. SpringMVC自定义视图 Excel视图和PDF视图

    一.自定义视图-Excel视图 1.Maven依赖 引入POI <dependency> <groupId>org.apache.poi</groupId> < ...

  5. MVC自定义视图规则

    自定义规则: using System.Web.Mvc; using System.Configuration; namespace Research { public class ViewConfi ...

  6. (翻译)为你的MVC应用程序创建自定义视图引擎

    Creating your own MVC View Engine For MVC Application 原文链接:http://www.codeproject.com/Articles/29429 ...

  7. iOS-xib(使用XIB实现嵌套自定义视图)

    参考:http://wtlucky.github.io/geekerprobe/blog/2014/08/10/nested-xib-views/?utm_source=tuicool 因为主要练习x ...

  8. 自定义视图一:扩展现有的视图,添加新的XML属性

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! 简介 这个系列详细的介绍了如何穿件Android自定义视图.主要涉及的内容有如何绘制内容,layout和measure的原理,如何继承 ...

  9. 一个基于MBProgressHUD的自定义视图hud例子

    项目中用到的一个hud,基于MBProgressHUD,使用自定义视图实现的,动画效果是从网上参考的,并不是很理想.有需要的可以看看,这里是源码(源码用了cocoapods,运行前需要pod inst ...

随机推荐

  1. jQuery Chosen 使用

    jQuery Chosen 使用   1.  jQuery Chosen 选择框下拉值重置: 1 2 3 4 //重置 $("#easySelBrands").val(" ...

  2. Set up development environment for apps for SharePoint 2013

    SharePoint 2013 support app development pattern.An app for SharePoint is small and isolate applicati ...

  3. asp.net中Winform开发框架之数据即时更新的实现

    在开篇之前,首先介绍一下Winform开发框架中的界面层的继承关系,首先我把所有窗体区分为三类,一类是普通的窗体,一类编辑窗体,还有一类是列表显示窗体.窗体的集成可以封装处理很多东西,良好的封装和继承 ...

  4. html 图片在一个div中放大缩小效果

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  5. CustomValidator控件用法

    虽然大部分时间一直从事asp.net的开发,对于一些常用的asp.net服务器端验证控件及它们的组合使用比较熟悉,如:CompareValidator ——比较验证控件RangeValidator — ...

  6. [转]一台电脑上的git同时使用两个github账户

    需求: 公司有github账号,自己有github账号,想在git上同时使用,两者互不干扰. 思路: 管理两个SHH key. 解决方案: 一.生成两个SSH key 为了举例方便,这里使用“one” ...

  7. 针对MSHFlexGrid的一系列通用方法-项目中实践代码分享

    1.给MSHFlexGrid填充数据通用方法 '自定义报表填充程序 fgrid Public Function ShowformfData(Resultset As ADODB.Recordset, ...

  8. WPF编程学习——窗口

    转自 http://www.cnblogs.com/libaoheng/archive/2011/11/18/2253751.html 本文目录 1.窗口的外观 2.窗口的位置 3.窗口的大小 4.窗 ...

  9. BigBao 的python开发到DevOps 之路

    本人是打杂的,从想学Python到自学Python,最后到报班培训Python路程总共用时两年,目前在培训Python.因为我这个大脑不适合自学.脑袋笨,自制力差,所以没办法只有乖乖交钱学python ...

  10. bit,Byte,Word,DWORD(DOUBLE WORD,DW)

    1个二进制位称为1个bit,8个二进制位称为1个Byte,也就是1个字节(8位),2个字节就是1个Word(1个字,16位),则DWORD(DOUBLE WORD)就是双字的意思,两个字(4个字节/3 ...