《计算器(android,安卓,控件).ppt》由会员分享,可在线阅读,更多相关《计算器(android,安卓,控件).ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、任务3 计算器计算器n通过前面我们学习的知识,再加上我们这节课介绍的几个控件,请大家能够独立完成一个计算器程序。n该程序只需要实现简单的加减乘除运算,不要求累计运算。任务简介n掌握几种控件的属性/方法/监听器n独立完成计算器程序(作业提交)注:完成基本以外的功能均有加分1 1 控件控件1-1 ImageViewnImageView是View的直接子类,用于在屏幕上显示一幅图片。1-1 ImageViewn使用android:src属性设置ImageView的图片源。n通过调用调用ImageView类的setImageResource(int resId)方法,可以动态的设定ImageView的
2、图片源。android:src=drawable/picturename1-1 ImageViewn使用android:adjustViewBounds:自动调整图片边框以适应图片nandroid:layout_width 图片宽度nandroid:layout_height 图片高度1-1 ImageView图片缩放ImageView image=(ImageView)findViewById(R.id.scale);/从资源文件获得Bitmap对象/Bitmap pic=BitmapFactory.decodeResource(getResources(),R.drawable.jadde
3、);/查询bitmap的高度和宽度int w=pic.getWidth();50int h=pic.getHeight();40/缩放图片 100 80Bitmap scaled=Bitmap.createScaledBitmap(pic,100,100*h/w,false);image.setImageBitmap(scaled);1-2 DatePicker/TimePickernDatePicker和TimePicker组件,分别用于设置日期和时间。nDatePicker用于设置年、月、日。nTimePicker用于设置小时、分。1-2 DatePicker/TimePickern两个控
4、件的属性比较常见1-2 TimePicker设置时间监听器n如果希望监听用户更改日期的事件,可以通过设置OnTimeChangedListener。timePicker=(TimePicker)findViewById(R.id.timepicker);timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener()public void onTimeChanged(TimePicker view,int hourOfDay,int minute)/);1-2 DatePicker设置日期监听器n监听用户更改日
5、期的事件,设置OnDateChangedListener,请注意该监听器是通过init函数传入的。datePicker=(DatePicker)findViewById(R.id.datepicker);Calendar calendar=Calendar.getInstance();int year=calendar.get(Calendar.YEAR);int month=calendar.get(Calendar.MONTH);int day=calendar.get(Calendar.DAY_OF_MONTH);/设置监听器,当用户修改日期,onDateChanged()被调用date
6、Picker.init(year,month,day,new DatePicker.OnDateChangedListener()public void onDateChanged(DatePicker view,int year,int monthOfYear,int dayOfMonth);1-3 SpinnernSpinner是AdapterView的子类,Spinner用于显示下拉列表,供用户从列表中选择数据。nSpinner同样是通过Adapter与数据绑定。Spinner控件字符串数组ArrayAdapter1-3 Spinnernandroid:prompt属性用于设置Spinn
7、er组件上的提示信息。1-3 Spinnern显示Spinner之前,必须构建一个Adapter,用来连接数据,这些数据最终将显示在Spinner控件上。Spinner控件数据Adapter1-3 Spinner-创建n显示Spinner之前,必须构建一个Adapter,用来连接数据,这些数据最终将显示在Spinner控件上。String CITY=北京,上海,杭州,唐山;/从数组创建ArrayAdapterArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_spinner_item,CITY);/设置下拉列表单
8、选框的显示样式/adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);/设置spinner的数据源spinner.setAdapter(adapter);Android系统自带的spinner项的id1-3 Spinner-事件响应n为Spinner设置监听器OnItemSelectedListenerspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()public void onItemSele
9、cted(AdapterView arg0,View arg1,int arg2,long arg3)/arg0:spinner控件/arg1:被选中的项/arg2:被选中项的序号/arg3:被选中项的ID public void onNothingSelected(AdapterView arg0);1-4 ProgressBarnProgressBar组件用来提示用户当前任务执行的进度,分为Intermediate模式和Indeterminate模式。nintermediate模式的ProgressBar包含两个进度显示,分别是主进度和次进度。比如下载歌曲播放,主进度可以是当前歌曲的播放进
10、度,可以是下载的进度。nindeterminate模式无法计算当前执行的进度,通常显示某种任务在执行。1-4 Indetermediate模式n有些任务无法显示百分比,此时使用Indetermediate模式的ProgressBar。运行时,在界面上显示一个循环圆圈动画。requestWindowFeature(Window.FEATURE_INDETERMEDIATE_PROGRESS)方法可以启动此功能。1-4 Indetermediate模式requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);setContentView
11、(R.layout.progressbar);/设置bar的可见性setProgressBarIndeterminateVisibility(visible);progress=(ProgressBar)findViewById(R.id.progress);Button button=(Button)findViewById(R.id.toggle);button.setOnClickListener(new View.OnClickListener()public void onClick(View v)visible=!visible;/编程bar的可见性setProgressBarIn
12、determinateVisibility(visible););1-4 Intermediate模式nIntermediate模式的ProgressBar包含两个进度显示,分别是主进度和次进度。可以调用下面的方法更新。public synchronized void setProgress(int progress)public synchronized void setSecondaryProgress(int secondaryProgress)nandroid:progress属性设置主进度值nandroid:secondaryProgress属性设置次进度值。1-4使用Handler
13、更新ProgressBarn只有在UI线程中才能更改View对象,而任务通常是在另外一个线程中执行,在那里才能知道任务的执行百分比。nHandler创建时将和所在线程和线程中的消息队列绑定到一起,Handler对象发送的消息或者Runnable对象将被放到所在线程的消息队列之中。1-4使用Handler更新ProgressBarUI线程子线程new Thread(this).start();Runhandler.post更新控件或者Activity1-4使用Handler更新ProgressBar/子线程运行的代码public void run()/获取当前的进度progressCurrent
14、=progress.getProgress();progressSecond=progress.getSecondaryProgress();/如果当前进度小于100,不停的累加并更新界面while(progressCurrent 100)/使用handler在单独线程中更新界面handler.post(new Runnable()public void run()progress.setProgress(+progressCurrent);progress.setSecondaryProgress(+progressSecond););2 2 计算器计算器计算器n独立完成计算器程序(作业提交)计算器n设计界面n创建控件,获取控件变量n实现监听器n完善代码