一、DatePicker与TimePicker动态输入时间和日期
private int mYear; private int mMonth; private int mDay; private int mHour; private int mMinute; TextView tv; TimePicker tp; DatePicker dp; public void onCreate(Bundle savedInstanceState) { Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); mHour = c.get(Calendar.HOUR_OF_DAY); mMinute = c.get(Calendar.MINUTE); super.onCreate(savedInstanceState); setContentView(R.layout.picker); tv = (TextView) findViewById(R.id.showTime); updateDisplay(); dp = (DatePicker) findViewById(R.id.dPicker); dp.init(mYear, mMonth, mDay, new DatePicker.OnDateChangedListener() { public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; /* 调用updateDisplay()来改变显示日期 */ updateDisplay(); } }); tp = (TimePicker) findViewById(R.id.tPicker); tp.setIs24HourView(true); tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; /* 调用updateDisplay()来改变显示时间 */ updateDisplay(); } }); } private void updateDisplay() { tv.setText(new StringBuilder().append(mYear).append("/") .append(format(mMonth + 1)).append("/").append(format(mDay)) .append(" ").append(format(mHour)).append(":") .append(format(mMinute))); } private String format(int x) { String s = "" + x; if (s.length() == 1) s = "0" + s; return s; }
二、弹出窗口输入日期和时间
private int mYear; private int mMonth; private int mDay; private int mHour; private int mMinute; private TextView tv; private Button button1; private Button button2; public void onCreate(Bundle savedInstanceState) { Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); mHour = c.get(Calendar.HOUR_OF_DAY); mMinute = c.get(Calendar.MINUTE); super.onCreate(savedInstanceState); setContentView(R.layout.picker2); tv = (TextView) findViewById(R.id.textView1); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); updateDisplay(); button1.setOnClickListener(new OnClickListener() { public void onClick(View v) { new DatePickerDialog(Picker2.this, new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; updateDisplay(); } }, mYear, mMonth, mDay).show(); } }); button2.setOnClickListener(new OnClickListener() { public void onClick(View v) { new TimePickerDialog(Picker2.this, new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; updateDisplay(); } }, mHour, mMinute, true).show(); } }); } private void updateDisplay() { tv.setText(new StringBuilder().append(mYear).append("/") .append(format(mMonth + 1)).append("/").append(format(mDay)) .append(" ").append(format(mHour)).append(":") .append(format(mMinute))); } private String format(int x) { String s = "" + x; if (s.length() == 1) s = "0" + s; return s; }
PhoneGap 提供有2个重要的组件:
1. 将本地功能暴露到JavaScript的层面,用户可以通过JavaScript编程调用
2. 对于特定平台的本地代码,可以通过PhoneGap 的 JavaScript API 调用
它的核心库被设计为能够在绝大多数的设备上处理通用的任务:
1. 能通过 PhoneGap JavaScript API 访问地理位置
2. 能通过 PhoneGap JavaScript API 访问联系人信息
3. 发起一次调用
它所不擅长:
1. 处理大数据量
2. 作为后台进程运行
3. 实现复杂的业务逻辑
短处的解决办法:
1. 实现一个自定义的用本地代码编写的组件
2. 实现一个自定义的用JavaScript 编写的API ,并有自定义的本地组件绑定
也就是实现PhoneGap的插件,扩展PhoneGap的框架
举例说明:
现在需要编写一个跨iOS和Android平台的PhoneGap插件,那么我们需要做以下几件事:
1. 编写一个运行在iOS和Android上的JavaScript文件
2. 编写一个Android的java文件
3. 编写一对iOS的.h和.m文件
今天Himi单用一篇博文来给童鞋们介绍精灵相关的两个常用的细节知识点;
首先来介绍第一个知识点:精灵可视区域;
不管在哪个移动平台上进行开发游戏都会接触使用到可视区域,比如Kjava(J2me)平台的setClip方法,Android的clipRect方法等等,那么在iOS上也一样存在,这里我们介绍cocos2d引擎中的可视区域得函数是setTextureRect;
可能没有接触过游戏得童鞋不明白其概念,那么Himi就简单概述下:
所谓可视区域就是在一个完整的表面上对其设置一定大小的区域,让其只显示设置的区域的面,其他部分隐藏不显示出来;最常用的是将一张图片设置一个可视区域,只让这张图展示设置的区域;
那么这里在啰嗦几句,在cocos2d中精灵CCSprite的可视区域一般可以通过两种方式来设置:
1.在创建精灵的时候进行设置;2.在创建后进行设置;举例如下:
新建一个cocos2d项目,然后在HelloWorldLayer.m中init方法中创建一个精灵,代码如下:
上面我创建了3个精灵,第一个没有设置可是区域的icon精灵,第二个和第三个是设置了可视区域宽30高30的精灵,但是第二个和第三个精灵的可是区域宽高相同,但是起始点不同;而且第二个是从创建精灵的时候设置可视区域,第三个精灵则是创建精灵后进行设置的,设置的地方不一样,功能是一样的;
需要详细讲解的是不管用以上两种设置可视区域的哪种方法都需要传入一个CGRect对象,这个CGrect参数有四个,坐标x,y,以及宽高w,y;
那么CGRect在可是区域的函数中的作用如下:
CGRect的x,y表示从这个精灵贴图的(x,y)坐标开始设置可视区域,(w,h)可视区域的大小;
下面是运行效果图,童鞋们通过三个精灵(从左往右)之间的对比就很容易明白的:
下面介绍第二个知识点:精灵锚点(anchorPoint);
渲染锚点的作用就是在渲染图片的时候确定其渲染的方式,一般常用的锚点有以下几种:
图片左上角、图片右上角、图片中心点、图片左下角、图片右下角等等
首先童鞋们需要知道一点,在cocos2d引擎中在layer中添加渲染精灵贴图的时候默认的锚点是其中心点;
那么由于cocos2d中layer的原点(0,0)点是屏幕的左下角,所以如果默认创建一个精灵添加到layer中的话,是精灵的中心点放置在layer的原点上,即精灵图片显示在屏幕中只是精灵的宽一半高一半,如下图:
对应代码如下:
那么如果我们设置其精灵的锚点为左下角则正好将精灵icon完整显示出来,因为精灵的左下角正好与layer的原点重合,如下图:
对应代码如下:
//---设置精灵锚点为左下角
CCSprite * spriteNew =[CCSprite spriteWithFile:@"icon.png"];