Android开发之《Android应用开发揭秘》UI事件汇总

http://blog.csdn.net/redoffice/article/details/7030723#comments

 

Android开发之《Android应用开发揭秘》UI事件汇总

/*

 *  Android开发之《Android应用开发揭秘》UI事件汇总

 *  北京Android俱乐部群:167839253

 *  Created on: 2011-12-01

 *  Author: blueeagle

 *  Email: liujiaxiang@gmail.com

 */

思想跑毛是很可怕的,最近去尝试了下创业,结果碰了一鼻子灰,公司乱七八糟的项目搞的焦头烂额。各种没有心情。还好,现在沉淀下来,继续android开发的征程。

以下是Android应用开发揭秘这本书第四章的关于UI的事件处理的总结。基本上都是可以复用的代码。存着日后方便。

1.EditView控件的setOnKeyListener方法。点击上下左右键或者中间键的时候可以出发该方法。代码如下。

  1.      myEditView.setOnKeyListener(new EditText.OnKeyListener(){  
  2.   
  3. @Override  
  4. public boolean onKey(View v, int keyCode, KeyEvent event) {  
  5.         myTextView.setText("文本框中内容是:"+myEditView.getText().toString());  
  6.         return false;// TODO Auto-generated method stub  
  7. }  
  8.      });  


2.RadioButton控件和RadioGroup控件的组合使用,代码如下:

  1.      myRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {  
  2.   
  3. @Override  
  4. public void onCheckedChanged(RadioGroup group, int checkedId) {  
  5.     // TODO Auto-generated method stub   
  6.     if(checkedId == myRadioButton3.getId())  
  7.     {  
  8.         DisplayToast("正确答案:"+myRadioButton3.getText()+"恭喜你回答正确");  
  9.     }  
  10.     else  
  11.     {  
  12.         DisplayToast("回答错误");  
  13.     }  
  14. }  
  15. );  


3.CheckBox控件的使用,代码如下:

  1. myCheckBox1.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){  
  2.     @Override  
  3.     public void onCheckedChanged(CompoundButton buttonView,  
  4.             boolean isChecked) {  
  5.         // TODO Auto-generated method stub   
  6.         if(myCheckBox1.isChecked()){  
  7.             DisplayToast("你选择了:"+myCheckBox1.getText());  
  8.         }             
  9.     }             
  10.       });  


4.Button控件的使用,代码如下:

  1.      myButton1.setOnClickListener(new Button.OnClickListener(){  
  2. @Override  
  3. public void onClick(View v) {  
  4. }             
  5.      });  


4.Spinner控件的使用,代码如下:

  1. //Spinner控件需要跟ArrayAdapter绑定使用。   
  2.     private static final String[] m_Countries = {"A型","B型","O型","AB型","未知类型"};  
  3.     private Spinner mySpinner;  
  4.     private ArrayAdapter<String> myAdapter;  
  5.         mySpinner = (Spinner)findViewById(R.id.mySpinner1);          
  6.         myAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,m_Countries);  
  7.         //设置下拉列表风格   
  8.         myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  9.         //将adapter添加到mySpinner中   
  10.         mySpinner.setAdapter(myAdapter);  
  11.         //添加事件监听   
  12.         mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){  
  13.             @Override  
  14.             public void onItemSelected(AdapterView<?> arg0, View arg1,  
  15.                     int arg2, long arg3) {  
  16.                 // TODO Auto-generated method stub   
  17.                 myTextView.setText("你的血型是"+ m_Countries[arg2]);  
  18.                 arg0.setVisibility(View.VISIBLE);  
  19.             }  
  20.             @Override  
  21.             public void onNothingSelected(AdapterView<?> arg0) {  
  22.                 // TODO Auto-generated method stub   
  23.                 DisplayToast("你什么也没选!");  
  24.             }             
  25.         });  

5.AutoCompleteTextView的使用,代码如下:

  1. private static final String[] autoString = {"abcd1","abcd212","32123","32open","32add","android","windows","iphone","linux","mydirve","msnbmw","wocaonimalegebi"};  
  2.     private ArrayAdapter<String> myAdapter1;  
  3.     private AutoCompleteTextView myAutoCompleteTextView;  
  4.         myAdapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,autoString);  
  5.         myAutoCompleteTextView = (AutoCompleteTextView)findViewById(R.id.myAutoCompleteTextView);  
  6.         myAutoCompleteTextView.setAdapter(myAdapter1);  
  7. 6.DatePicker、TimePicker以及Button的使用,代码如下:  
  8.         myCalendar1 = Calendar.getInstance();  
  9.         myTextView = (TextView)findViewById(R.id.myTextView);  
  10.         myDatePicker = (DatePicker)findViewById(R.id.datePicker1);  
  11.         myTimePicker = (TimePicker)findViewById(R.id.timePicker1);  
  12.         myButton1 = (Button)findViewById(R.id.button1);  
  13.         myButton2 = (Button)findViewById(R.id.button2);  
  14.           
  15.         //将日历初始化为当前系统时间,并设置其事件监听   
  16.         myDatePicker.init(myCalendar1.get(Calendar.YEAR), myCalendar1.get(Calendar.MONTH), myCalendar1.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {  
  17.               
  18.             @Override  
  19.             public void onDateChanged(DatePicker view, int year, int monthOfYear,  
  20.                     int dayOfMonth) {  
  21.                 // 当日期更改时,在这里处理。   
  22.                 // myCalendar1.set(year, month, day);   
  23.             }  
  24.         });  
  25.         //获取TimePicker对象设置为24小时显示。   
  26.         myTimePicker.setIs24HourView(true);  
  27.         //监听时间改变   
  28.         myTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {  
  29.               
  30.             @Override  
  31.             public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {  
  32.                 // TODO Auto-generated method stub   
  33.                 // 当时间改变时,在这里处理。   
  34.                 //myCalendar1.set(year, month, day, hourOfDay, minute);   
  35.             }  
  36.         });  
  37.         //-----------按钮事件---------//   
  38.         myButton1.setOnClickListener(new Button.OnClickListener(){  
  39.             @Override  
  40.             public void onClick(View v) {  
  41.                 // 下面的NEW 是新建了一个调整日历的对话框   
  42.                 new DatePickerDialog(AndroidUnleashed001Activity.this,new DatePickerDialog.OnDateSetListener(){  
  43.                     @Override  
  44.                     public void onDateSet(DatePicker view, int year,  
  45.                             int monthOfYear, int dayOfMonth) {  
  46.                         // TODO Auto-generated method stub   
  47.                         //设置日历   
  48.                     }             
  49.                 },myCalendar1.get(Calendar.YEAR),myCalendar1.get(Calendar.MONTH), myCalendar1.get(Calendar.DAY_OF_MONTH)).show();  
  50.             }  
  51.         });          
  52.         myButton2.setOnClickListener(new Button.OnClickListener(){  
  53.             @Override  
  54.             public void onClick(View v) {  
  55.                 //下面的NEW 是新建了一个调整时间的对话框        
  56.                 new TimePickerDialog(AndroidUnleashed001Activity.thisnew TimePickerDialog.OnTimeSetListener() {  
  57.                       
  58.                     @Override  
  59.                     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {  
  60.                         // TODO Auto-generated method stub                         
  61.                     }  
  62.                 }, myCalendar1.get(Calendar.HOUR_OF_DAY), myCalendar1.get(Calendar.MINUTE),true).show();  
  63.             }             
  64.         });  
  65. }  


 

7.Menu的使用,代码如下:

1.XML方式实现

XML代码可以写成:

  1. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
  2. <item android:id="@+id/style_submenu" android:title="笔迹样式">  
  3.  <menu>  
  4.  <group android:id="@+id/style_group" android:checkableBehavior="single">  
  5.   <item android:id="@+id/style" android:orderInCategory="1" android:title="铅笔" />   
  6.   <item android:id="@+id/style" android:orderInCategory="2" android:title="钢笔" />   
  7.   <item android:id="@+id/style" android:orderInCategory="3" android:title="毛笔" />   
  8.   </group>  
  9.   </menu>  
  10.   </item>  
  11.  <item android:id="@+id/color_submenu" android:title="笔迹颜色">  
  12.  <menu>  
  13.  <group android:id="@+id/color_group" android:checkableBehavior="single">  
  14.   <item android:id="@+id/color" android:orderInCategory="0" android:title="蓝色" />   
  15.   <item android:id="@+id/color" android:orderInCategory="1" android:title="绿色" />   
  16.   <item android:id="@+id/color" android:orderInCategory="2" android:title="青色" />   
  17.   <item android:id="@+id/color" android:orderInCategory="3" android:title="红色" />   
  18.   </group>  
  19.   </menu>  
  20.   </item>  
  21.  <item android:id="@+id/width_submenu" android:title="笔迹粗细">  
  22.  <menu>  
  23.  <group android:id="@+id/width_group" android:checkableBehavior="single">  
  24.   <item android:id="@+id/width" android:orderInCategory="1" android:title="较细" />   
  25.   <item android:id="@+id/width" android:orderInCategory="2" android:title="细" />   
  26.   <item android:id="@+id/width" android:orderInCategory="3" android:title="中等" />   
  27.   <item android:id="@+id/width" android:orderInCategory="4" android:title="粗" />   
  28.   <item android:id="@+id/width" android:orderInCategory="5" android:title="较粗" />   
  29.   </group>  
  30.   </menu>  
  31.   </item>  
  32.   <item android:id="@+id/write" android:title="书写" />   
  33.   <item android:id="@+id/erase" android:title="清除" />   
  34.   <item android:id="@+id/clear" android:title="清屏" />  
  35.   </menu>  


JAVA代码:

  1.    @Override  
  2. public boolean onCreateOptionsMenu(Menu menu){  
  3.     MenuInflater inflater = getMenuInflater();  
  4.     inflater.inflate(R.menu.menu, menu);  
  5.     return true;  
  6. }  
  7.    @Override  
  8. public boolean onOptionsItemSelected(MenuItem item){  
  9.     int item_id = item.getItemId();  
  10.     switch (item_id)  
  11.     {  
  12.     case R.id.about1:  
  13.         Intent intent = new Intent();  
  14.           
  15.         intent.setClass(AndroidUnleashed001Activity.this, Activity02.class);  
  16.         startActivity(intent);  
  17.         AndroidUnleashed001Activity.this.finish();  
  18.         break;  
  19.     case R.id.about2:  
  20.         AndroidUnleashed001Activity.this.finish();  
  21.         break;  
  22.     }  
  23.     return true;  
  24. }  
  25. .Menu.add方法实现  
  26. public boolean onCreateOptionsMenu(Menu menu){  
  27.     //MenuInflater inflater = getMenuInflater();   
  28.     //inflater.inflate(R.menu.menu, menu);   
  29.     menu.add(0,0,0,R.string.app_name);  
  30.     menu.add(0,1,1,R.string.hello);  
  31.     return true;  
  32. }  

8.弹出对话框的使用,代码如下:

这个功能为弹出对话框,点击确定后弹出登录对话框,然后点击登录后弹出多线程对话框。

  1. Dialog dialog = new AlertDialog.Builder(AndroidUnleashed001Activity.this).setTitle("登录提示").setMessage("这里需要登录").setPositiveButton("确定"new DialogInterface.OnClickListener() {       
  2.             @Override  
  3.             public void onClick(DialogInterface dialog, int which) {  
  4.                 // 点击确定转向登陆框   
  5.                 LayoutInflater factory = LayoutInflater.from(AndroidUnleashed001Activity.this);  
  6.                 //得到自定义对话框   
  7.                 final View DialogView = factory.inflate(R.layout.pop, null);  
  8.                 //创建对话框   
  9.                 AlertDialog dlg = new AlertDialog.Builder(AndroidUnleashed001Activity.this).setTitle("登录框").setView(DialogView).setPositiveButton("确定"new DialogInterface.OnClickListener() {                   
  10.                     private ProgressDialog myProgressDialog;  
  11.                     @Override  
  12.                     public void onClick(DialogInterface dialog, int which) {  
  13.                         // 当输入完成后,点击确定开始登录。   
  14.                         myProgressDialog = ProgressDialog.show(AndroidUnleashed001Activity.this"请等待""正在为您登陆",true);  
  15.                         new Thread(){  
  16.                             public void run(){  
  17.                                 try{  
  18.                                     sleep(3000);  
  19.                                 }  
  20.                                 catch(Exception e){  
  21.                                     e.printStackTrace();  
  22.                                 }  
  23.                                 finally{  
  24.                                     myProgressDialog.dismiss();  
  25.                                 }  
  26.                             }  
  27.                         }.start();                        
  28.                     }  
  29.                 }).setNegativeButton("取消"new DialogInterface.OnClickListener() {  
  30.                       
  31.                     @Override  
  32.                     public void onClick(DialogInterface dialog, int which) {  
  33.                         // TODO Auto-generated method stub   
  34.                         AndroidUnleashed001Activity.this.finish();  
  35.                     }  
  36.                 }).create();  
  37.                 dlg.show();               
  38.             }  
  39.         }).setNegativeButton("退出"new DialogInterface.OnClickListener() {  
  40.               
  41.             @Override  
  42.             public void onClick(DialogInterface dialog, int which) {  
  43.                 // TODO Auto-generated method stub   
  44.                 AndroidUnleashed001Activity.this.finish();  
  45.             }  
  46.         }).create();  
  47.         dialog.show();  


9.ImageView的使用,代码如下:

 

  1. myImageButton1.setImageDrawable(getResources().getDrawable(R.drawable.logo2));  
  2.           
  3.         myImageButton1.setOnClickListener(new Button.OnClickListener(){  
  4.   
  5.             @Override  
  6.             public void onClick(View v) {  
  7.                 // TODO Auto-generated method stub   
  8.                 Dialog mydialog = new AlertDialog.Builder(AndroidUnleashed003Activity.this).setTitle("提示")  
  9.                 .setMessage("我是ImageButton1").setPositiveButton("确定",new DialogInterface.OnClickListener() {  
  10.                       
  11.                     @Override  
  12.                     public void onClick(DialogInterface dialog, int which) {  
  13.                         // TODO Auto-generated method stub   
  14.                           
  15.                     }  
  16.                 }).create();  
  17.                 mydialog.show();  
  18.             }     
  19.         });  

注意:如果要去掉ImageButton后面的背景色,使得ImageButton看起来更漂亮一些而不是有个边,则需要做:在XML文件中的属性里添加:“android:background="#00000000"”

10.Gallery的使用,拖动效果很炫,代码如下:

  1.  Gallery myGallery = (Gallery)findViewById(R.id.myGallery);          
  2.         //添加ImageAdapter给Gallery对象           
  3.         myGallery.setAdapter(new ImageAdapter(this));  
  4.         myGallery.setBackgroundResource(R.drawable.background);  
  5.         myGallery.setOnItemClickListener(new OnItemClickListener(){  
  6.             @Override  
  7.             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  8.                     long arg3) {  
  9.                 // TODO Auto-generated method stub   
  10.                 Toast.makeText(AndroidUnleashed003Activity.this"你选择了"+(arg2+1)+" 号图片 ", Toast.LENGTH_SHORT).show();  
  11.             }             
  12.         });                  
  13.     }  
  14. //另外,需要存放图片,存放图片的容器,需要使用一个类实现,这个类是ImageAdapter,继承于BaseAdapter。   
  15. public class ImageAdapter extends BaseAdapter{  
  16.     private Context myContext;  
  17.     private Integer[] mImageIds = {  
  18.             R.drawable.ic_launcher,  
  19.             R.drawable.icon,  
  20.             R.drawable.logo,  
  21.             R.drawable.logo2,  
  22.             R.drawable.logo,  
  23.             R.drawable.ic_launcher,  
  24.             R.drawable.icon,  
  25.             R.drawable.logo,  
  26.     };  
  27.     public ImageAdapter(Context c){  
  28.         myContext = c;  
  29.     }  
  30.     @Override  
  31.     //获取图片的个数   
  32.     public int getCount() {  
  33.         // TODO Auto-generated method stub   
  34.         return mImageIds.length;  
  35.     }  
  36.     @Override  
  37.     //获取图片在库中的位置   
  38.     public Object getItem(int arg0) {  
  39.         // TODO Auto-generated method stub   
  40.         return arg0;  
  41.     }  
  42.   
  43.     @Override  
  44.     //获取图片在库中的位置   
  45.     public long getItemId(int arg0) {  
  46.         // TODO Auto-generated method stub   
  47.         return arg0;  
  48.     }  
  49.     @Override  
  50.     public View getView(int position, View arg1, ViewGroup arg2) {  
  51.         // TODO Auto-generated method stub   
  52.         //return null;   
  53.         ImageView myImageView = new ImageView(myContext);  
  54.         //给ImageView设置资源   
  55.         myImageView.setImageResource(mImageIds[position]);  
  56.         //设置布局图片以120*120显示   
  57.         //myImageView.setLayoutParams(new Gallery.LayoutParams(120,120));   
  58.         //设置显示比例类型   
  59.         //myImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);   
  60.         return myImageView;  
  61.     }  
  62. }  

11.ImageSwitcher的使用,代码如下:

  1. //首先需要实现接口:   
  2. extends Activity implements OnClickListener,ViewFactory  
  3. //具体操作:   
  4.         LinearLayout myMainView = new LinearLayout(this);  
  5.         //创建ImageSwitcher对象   
  6.         mySwitcher = new ImageSwitcher(this);  
  7.         myMainView.addView(mySwitcher);  
  8.         mySwitcher.setId(BUTTON_SWITCHER_ID);  
  9.         mySwitcher.setFactory(this);  
  10.         mySwitcher.setImageResource(mImageIds[index]);  
  11.           
  12.         setContentView(myMainView);  
  13.           
  14.         Button next = new Button(this);  
  15.         next.setId(BUTTON_DOWN_ID);  
  16.         next.setText("下一张");  
  17.         next.setOnClickListener(this);  
  18.         //LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(200,200);   
  19.         myMainView.addView(next);  
  20.           
  21.         Button pre = new Button(this);  
  22.         pre.setId(BUTTON_UP_ID);  
  23.         pre.setText("上一张");  
  24.         pre.setOnClickListener(this);  
  25.         myMainView.addView(pre);  
  26.           
  27.     }  
  28.   
  29.     private ImageSwitcher mySwitcher;  
  30.     private static int index = 0;  
  31.     //上一页,下一页的按钮索引和Switcher的对象ID   
  32.     private static final int BUTTON_DOWN_ID = 0x123456;  
  33.     private static final int BUTTON_UP_ID = 0x123457;  
  34.     private static final int BUTTON_SWITCHER_ID = 0x123458;  
  35.   
  36. //实现OnClickListener接口的函数   
  37.     @Override  
  38.     public void onClick(View v) {  
  39.         // TODO Auto-generated method stub   
  40.         switch(v.getId()){  
  41.         case BUTTON_DOWN_ID:  
  42.             index++;  
  43.             if(index>= mImageIds.length){  
  44.                 index = 0;  
  45.             }  
  46.             mySwitcher.setImageResource(mImageIds[index]);  
  47.             break;  
  48.         case BUTTON_UP_ID:  
  49.             index--;  
  50.             if(index<0){  
  51.                 index = mImageIds.length-1;  
  52.             }  
  53.             mySwitcher.setImageResource(mImageIds[index]);  
  54.             break;  
  55.             default:  
  56.                 break;  
  57.         }  
  58.     }  
  59.   
  60.     //实现View.Factory接口的函数   
  61.     @Override  
  62.     public View makeView() {  
  63.         // TODO Auto-generated method stub   
  64.         return new ImageView(this);  
  65.     }  

12.GridView的使用,代码如下:

  1. //这个和Gallery的使用相似,也需要存图片在BaseAdapter中。   
  2.         GridView myGridView = (GridView)findViewById(R.id.gridView1);  
  3.         myGridView.setAdapter(new ImageAdapter(this));  
  4.           
  5.         myGridView.setBackgroundResource(R.drawable.background);  
  6.         myGridView.setOnItemClickListener(new OnItemClickListener(){  
  7.   
  8.             @Override  
  9.             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  10.                     long arg3) {  
  11.                 // TODO Auto-generated method stub   
  12.                 Toast.makeText(AndroidUnleashed003Activity.this"你选择了"+(arg2+1)+" 号图片 ", Toast.LENGTH_SHORT).show();  
  13.             }  
  14.               
  15.         });  
  16.     }  

12.ScrollView的使用,代码如下:

  1. //要垂直滚动,使用ScrollView要水平滚动使用HorizontalScrollView。   
  2.         myLayout = (LinearLayout)findViewById(R.id.myLayout);  
  3.         myScllorView = (ScrollView)findViewById(R.id.myScrollView);  
  4.         Button myButton = (Button)findViewById(R.id.myButton);  
  5.           
  6.         myButton.setOnClickListener(new Button.OnClickListener(){  
  7.             private int mIndex = -1;  
  8.             @Override  
  9.             public void onClick(View v) {  
  10.                 // TODO Auto-generated method stub   
  11.                 TextView myTextView = new TextView(ScrollerViewActivity.this);  
  12.                 myTextView.setText("Text View"+mIndex);  
  13.                 LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);  
  14.                 //增加一个TextView到现行布局中   
  15.                 myLayout.addView(myTextView,p);  
  16.                   
  17.                 Button myButtonView = new Button(ScrollerViewActivity.this);  
  18.                 myButtonView.setText("Button "+mIndex++);  
  19.                 //增加一个Button到线性布局中   
  20.                 myLayout.addView(myButtonView,p);  
  21.                 //改变默认焦点切换   
  22.                 //myButtonView.setOnKeyListener(newButtonKeyListener);   
  23.                 //投递一个消息进行滚动   
  24.                 //myHandler.post(myScolltoBottom);   
  25.             }  
  26.               
  27.         });  
  28.     }  

13.ProgressBar的使用,代码如下:

ProgressBarStyleHorizontal(长形进度条)

ProgressBarStyleLarge(圆形进度条)

  1. public class ProgressBarA extends Activity {  
  2.     protected static final int GUI_STOP_NOTIFIER = 0x108;  
  3.     protected static final int GUI_THREADING_NOTIFIER = 0x109;  
  4.     private ProgressBar myProgress1;  
  5.     private ProgressBar myProgress2;  
  6.     private Button myButton;  
  7.     private int intCounter;  
  8.     /** Called when the activity is first created. */  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         //设置窗口模式,因为需要显示进度条在标题栏   
  13.         requestWindowFeature(Window.FEATURE_PROGRESS);  
  14.         setProgressBarVisibility(true);  
  15.         setContentView(R.layout.main);  
  16.         //取得ProgressBar   
  17.         myProgress1 = (ProgressBar)findViewById(R.id.myProgressBar01);  
  18.         myProgress2 = (ProgressBar)findViewById(R.id.myProgressBar02);  
  19.         myButton = (Button)findViewById(R.id.myButton);  
  20.           
  21.         myProgress1.setIndeterminate(false);  
  22.         myProgress2.setIndeterminate(false);  
  23.           
  24.         myButton.setOnClickListener(new Button.OnClickListener(){  
  25.   
  26.             @Override  
  27.             public void onClick(View v) {  
  28.                 // TODO Auto-generated method stub   
  29.                 myProgress1.setVisibility(View.VISIBLE);  
  30.                 myProgress2.setVisibility(View.VISIBLE);  
  31.                   
  32.                 myProgress1.setMax(100);  
  33.                 myProgress1.setProgress(0);  
  34.                 myProgress2.setProgress(0);  
  35.                   
  36.                 //通过线程来改变Progress的值   
  37.                   
  38.                 new Thread(new Runnable(){  
  39.   
  40.                     @Override  
  41.                     public void run() {  
  42.                         // TODO Auto-generated method stub   
  43.                         for(int i=0;i<10;i++){  
  44.                             try{  
  45.                                 intCounter=(i+1)*20;  
  46.                                 Thread.sleep(1000);  
  47.                                 if(i==4){  
  48.                                     Message m = new Message();  
  49.                                     m.what = ProgressBarA.GUI_STOP_NOTIFIER;  
  50.                                     ProgressBarA.this.myMessageHandler.sendMessage(m);  
  51.                                     break;  
  52.                                 }  
  53.                                 else{  
  54.                                     Message m = new Message();  
  55.                                     m.what = ProgressBarA.GUI_THREADING_NOTIFIER;  
  56.                                     ProgressBarA.this.myMessageHandler.sendMessage(m);  
  57.                                 }  
  58.                             }  
  59.                             catch(Exception e){  
  60.                                 e.printStackTrace();  
  61.                             }  
  62.                         }  
  63.                     }  
  64.                       
  65.                 }).start();  
  66.             }  
  67.               
  68.         });  
  69.     }  
  70.     Handler myMessageHandler = new Handler(){  
  71.         public void handleMessage(Message msg){  
  72.             switch(msg.what){  
  73.             case ProgressBarA.GUI_STOP_NOTIFIER:  
  74.                 //myProgress1.setVisibility(View.GONE);   
  75.                 //myProgress2.setVisibility(View.GONE);   
  76.                 //Thread.currentThread().interrupt();   
  77.                 break;  
  78.             case ProgressBarA.GUI_THREADING_NOTIFIER:  
  79.                 if(!Thread.currentThread().isInterrupted()){  
  80.                 myProgress1.setProgress(intCounter);  
  81.                 myProgress1.setProgress(intCounter);  
  82.                 setProgress(intCounter*100);//设置标题栏中前景的一个进度条进度值   
  83.                 //setSecondaryProgress(intCounter*100);//设置标题栏中后面的一个进度条进度值   
  84.                 //Thread.currentThread().interrupt();   
  85.                 }  
  86.                 break;  
  87.         }  
  88.             super.handleMessage(msg);  
  89.     }  
  90.     };  
  91. }  


14.SeekBar的使用,代码如下:

  1. implements SeekBar.OnSeekBarChangeListener  
  2. //实现OnSeekBarChangeListener接口   
  3.     public void onProgressChanged(SeekBar seekBar, int progress,  
  4.             boolean fromUser) {  
  5.         // TODO Auto-generated method stub   
  6.         myProgressText.setText("当前值:"+ progress);  
  7.     }  
  8.     @Override  
  9.     public void onStartTrackingTouch(SeekBar seekBar) {  
  10.         // TODO Auto-generated method stub   
  11.         myTrackingText.setText("正在调节");  
  12.     }  
  13.     @Override  
  14.     public void onStopTrackingTouch(SeekBar seekBar) {  
  15.         // TODO Auto-generated method stub   
  16.         myTrackingText.setText("停止调节");  
  17.     }  
  18. }  

15.Notification、NotificationManager的使用,代码如下:

  1.      myIntent = new Intent(Notification01.this,Notification02.class);  
  2.      //主要是设置点击通知时显示内容的类   
  3.      myPendingIntent = PendingIntent.getActivity(Notification01.this0, myIntent, 0);  
  4.      //构造Notification对象   
  5.      myNotification = new Notification();  
  6.      myButton1.setOnClickListener(new  Button.OnClickListener(){  
  7. @Override  
  8. public void onClick(View v) {  
  9.     // TODO Auto-generated method stub   
  10.     //设置通知在状态栏显示的图标   
  11.     myNotification.icon = R.drawable.ic_launcher;  
  12.     myNotification.tickerText = "Button1的通知内容...";  
  13.     //通知时发出默认的声音   
  14.     myNotification.defaults = Notification.DEFAULT_SOUND;  
  15.     //设置通知显示的参数   
  16.     myNotification.setLatestEventInfo(Notification01.this,"Button1","Button1通知",myPendingIntent);  
  17.     //可以理解为执行这个通知   
  18.     myNotificationManager.notify(0,myNotification);  
  19. }     
  20.      });  

16.ProgressDialog的使用,代码如下:

  1.      myButton01 = (Button)findViewById(R.id.Button1);  
  2.      myButton02 = (Button)findViewById(R.id.Button2);  
  3.      myButton01.setOnClickListener(new Button.OnClickListener(){  
  4. @Override  
  5. public void onClick(View v) {  
  6.     // TODO Auto-generated method stub   
  7.     //创建ProgressDialog对象   
  8.     myProgressDialog = new ProgressDialog(ProgressDialogActivity.this);  
  9.     //设置进度条风格,风格为圆形的,旋转的   
  10.     myProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);  
  11.     //设置ProgressDialog标题   
  12.     myProgressDialog.setTitle("提示");  
  13.     //设置ProgressDialog提示信息   
  14.     myProgressDialog.setMessage("这是一个圆形进度条对话框");  
  15.     //设置myProgressDialog标题图标   
  16.     myProgressDialog.setIcon(R.drawable.ic_launcher);  
  17.     //设置myProgressDialog的进度条是否不明确   
  18.     myProgressDialog.setIndeterminate(false);  
  19.     //设置myProgressDialog是否可以按退回键取消   
  20.     myProgressDialog.setCancelable(true);  
  21.     //设置myProgressDialog的一个Button   
  22.     myProgressDialog.setButton("确定"new DialogInterface.OnClickListener() {  
  23.           
  24.         @Override  
  25.         public void onClick(DialogInterface dialog, int which) {  
  26.             // TODO Auto-generated method stub   
  27.             //点击确定取消对话框   
  28.             dialog.cancel();  
  29.         }  
  30.     });  
  31.     //让ProgressDialog显示   
  32.     myProgressDialog.show();  
  33. }     
  34.      });  
  35.        
  36.      myButton02.setOnClickListener(new Button.OnClickListener(){  
  37. @Override  
  38. public void onClick(View v) {  
  39.     // TODO Auto-generated method stub   
  40.     myCount = 0;  
  41.     //创建ProgressDialog对象   
  42.     myProgressDialog = new ProgressDialog(ProgressDialogActivity.this);  
  43.     //设置进度条风格,风格为长形的。   
  44.     myProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
  45.     //设置ProgressDialog标题   
  46.     myProgressDialog.setTitle("提示");  
  47.     //设置ProgressDialog提示信息   
  48.     myProgressDialog.setMessage("这是一个长形进度条对话框");  
  49.     //设置myProgressDialog标题图标   
  50.     myProgressDialog.setIcon(R.drawable.ic_launcher);  
  51.     //设置myProgressDialog进度条进度   
  52.     myProgressDialog.setProgress(100);  
  53.     //设置myProgressDialog的进度条是否不明确   
  54.     myProgressDialog.setIndeterminate(false);  
  55.     //设置myProgressDialog是否可以按退回键取消   
  56.     myProgressDialog.setCancelable(true);  
  57.     //设置myProgressDialog的一个Button   
  58.     myProgressDialog.setButton("确定"new DialogInterface.OnClickListener() {  
  59.           
  60.         @Override  
  61.         public void onClick(DialogInterface dialog, int which) {  
  62.             // TODO Auto-generated method stub   
  63.             //点击确定取消对话框   
  64.             dialog.cancel();  
  65.         }  
  66.     });  
  67.     //让ProgressDialog显示   
  68.     myProgressDialog.show();  
  69.        new Thread(){  
  70.         public void run(){  
  71.             try{  
  72.                 while(myCount <= 100){  
  73.                     //由线程来控制进度   
  74.                     myProgressDialog.setProgress(myCount++);  
  75.                     Thread.sleep(100);  
  76.                 }  
  77.                 myProgressDialog.cancel();  
  78.             }  
  79.             catch(InterruptedException e){  
  80.                 myProgressDialog.cancel();  
  81.             }  
  82.         }  
  83.        }.start();  
  84. }     
  85.      });  

17.TabWidget的使用,代码如下:

要使用TabWidget,首先要了解TabHost,TabHost是一个用来存放Tab标签的容器。

  1. public class TabHostActivity extends TabActivity {  
  2.     TabHost myTabHost;  
  3.   
  4.     /** Called when the activity is first created. */  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.         //获取TabHost对象   
  10.         myTabHost = getTabHost();  
  11.         //为TabHost添加标签,新建一个newTabSpec(newTabSpec)设置其标签和图标(setIndicator)设置内容(setContent)   
  12.         myTabHost.addTab(myTabHost.newTabSpec("tabHost1").setIndicator("TAB 1", getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.myTabContent1));  
  13.         myTabHost.addTab(myTabHost.newTabSpec("tabHost2").setIndicator("TAB 2", getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.myTabContent2));  
  14.         myTabHost.addTab(myTabHost.newTabSpec("tabHost3").setIndicator("TAB 3", getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.myTabContent3));  
  15.         //设置TabHost的背景颜色   
  16.         myTabHost.setBackgroundColor(Color.argb(1502270150));  
  17.         //设置当前显示哪个标签   
  18.         myTabHost.setCurrentTab(1);  
  19.         //标签切换事件处理setOnTabChangedListener   
  20.         myTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {  
  21.               
  22.             @Override  
  23.             public void onTabChanged(String tabId) {  
  24.                 // TODO Auto-generated method stub   
  25.                 Dialog dialog = new AlertDialog.Builder(TabHostActivity.this).setTitle("提示").setMessage("当前选中"+tabId).setPositiveButton("确定"new DialogInterface.OnClickListener() {  
  26.                       
  27.                     @Override  
  28.                     public void onClick(DialogInterface dialog, int which) {  
  29.                         // TODO Auto-generated method stub   
  30.                         dialog.cancel();  
  31.                     }  
  32.                 }).create();  
  33.                 dialog.show();  
  34.             }  
  35.         });  
  36.     }  
  37. }  

 

Android应用开发揭秘   Windows操作系统的诞生成就了微软的霸主地位,也造就了PC时代的繁荣。然而,以Android和iPhone手机为代表   的智能移动设备的发明却敲响了PC时代的丧钟!移动互联网时代(3G时代)已经来临,谁会成为这些移动设备上的主   宰?毫无疑问,它就是Android——PC时代的Windows!   移动互联网还是一个新生的婴儿,各种移动设备上的操作系统群雄争霸!与Sym‘Dian、i P}lone OS、Wiridows Mobile   相比,Androjd有着天生的优势一完全开放和免费,对广大开发者和手机厂商而言,这是何等的诱人!此外,在Google   和以其为首的Android手机联盟的大力支持和推广下,Android不仅得到了全球开发者社区的关注,而且一大批世界一流   的手机厂商都已经或准备采用Android。   拥抱Android开发。拥抱移动开发的未来!   如果你在思考下面这些问题,也许本书就是你想要的!   Android开发与传统的J2ME开发有何相似与不同?   如何通过Shared Preferences、Files、Network和SQLite等方式高效实现Android数据的存储?又如何通过Content Providers轻松地实现Androld数据的共享?   如何使用Open Core、MediaPlayer、MediaRecorder方便快速地开发出包含音频和视频等流媒体的丰富多媒体应用?   如何利用Android 2.0新增的蓝牙特性开发包含蓝牙功能的应用?又如何使用蓝牙APL来完善应用的网络功能?   如何解决Android网络通信中的乱码问题?   在Android中如何使用语音服务和Google Map Apl? Android如何访问摄象头、传感器等硬件的APl?   如何时行Widget开发?如何用各种Android组件来打造漂亮的UI界面?   Android如何解析XML数据?又如何提高解析速度和减少对内存、CPU资源的消耗?   如何使用OpenGL ES在Android平台上开发出绚丽的3D应用?在Android平台上如何更好地设计和实现游戏引擎?   如何对Android应用进行优化?如何进行程序性能测试?如何实现UI、zipalign和图片优化?如何通过NDK利用C、C++以及通过ASE利用Python等脚本语言Android开发应用?   国内首本基于Android 2.0的经典著作,5大专业社区一致鼎力推荐!
作者简介   杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会游戏软件分会(CGIA)认证及国际游戏开发教育联合会国际认证。曾经领导和参与《三国群英传说》、《大航海传奇》、《美少女养成计划》等经典游戏的开发。 编辑本段 图书目录   前言   第一部分 准备篇   第1章 Android开发简介   1.1 Android基本概念   1.1.1 Android简介   1.1.2 Android的系统构架   1.1.3 Android应用程序框架   1.2 OMS介绍   1.2.1 OPhone介绍   1.2.2 Widget介绍   1.3 小结   第2章 Android开发环境搭建   2.1 Android开发准备工作   2.2 开发包及其工具的安装和配置   2.2.1 安装JDK和配置Java开发环境   2.2.2 Eclipse的安装与汉化   2.2.3 SDK和ADT的安装和配置   2.3 创建第一个Android项目——HeUoAndroid   2.3.1 创建HelloAndroid项目   2.3.2 运行HelloAndroid及模拟器的使用   2.3.3 调试HelloAndroid   2.4 小结   第二部分 基础篇   第3章 Android程序设计基础   3.1 Android程序框架   3.1.1 Android项目目录结构   3.1.2 Android应用解析   3.2 Android的生命周期   3.3 Android程序U设计   3.4 小结   第4章 用户界面开发   4.1 用户界面开发详解   4.1.1 用户界面简介   4.1.2 事件处理   4.2 常用控件应用   4.2.1 文本框(Textiew)   4.2.2 列表(ListView)   4.2.3 提示(T0ast)   4.2.4 编辑框(EditText)   4.2.5 单项选择(RadioGroup、RadioButton   4.2.6 多项选择(CheckBox)   4.2.7 下拉列表(Spinner)   4.2.8 自动提示(AutoComplete.TextⅥew)   4.2.9 日期和时间(DatePicker、TimePicker)   4.2.10 按钮(Button)   4.2.1l 菜单(Menu)   4.2.12 对话框(Dialog)   4.2.13 图片视图(ImageView)   4.2.14 带图标的按钮(ImageButton)   4.2.15 拖动效果(Gallery)   4.2.16 切换图片(hmgeSwilcher)   4.2.17 网格视图(GridView)   4.2.18 卷轴视图(ScrollView)   4.2.19 进度条(ProgressBar)   4.2.20 拖动条(SeekBar)   4.2.21 状态栏提示(Notification、NotificationManager)   4.2.22 对话框中的进度条(ProgressDialog)   4.3 界面布局   4.3.1 垂直线性布局   4.3.2 水平线性布局   4.3.3.相对布局(RelativeLayout)   4.3.4 表单布局(TableLayout)   4.3.5 切换卡(TabWidget)   4,4 小结   第5章 Android游戏开发   5.1 Android游戏开发框架   5.1.1 View类开发框架   5.1.2 SurfaceView类开发框架   5.2 Graphics类开发   5.5.1 Paint和Color类介绍   5.2.2 Canvas类介绍   5.2.3 几何图形绘制   5.2.4 字符串绘制   5.2.5 图像绘制   5.2.6 图像旋转   5.2.7 图像缩放   5.2.8 图像像素操作   5.2.9 Shader类介绍   5.2.10 双缓冲技术   5.2.11 全屏显示   5.2.12 获得屏幕属性   5.3 动画实现   5.3.1 Tween动画   5.3.2 Frame动画   5.3.3 GIF动画播放   5.4 小结   第6章 Android数据存储   6.1 Android数据存储初探   6.2 数据存储之Shared Preferences   6.3 数据存储之Files   6.4 数据存储之Network   6.5 Android数据库编程   6.5.1 SQLite简介   6.5.2 SQLite编程详解   6.5.3 SQLiteOpenHelper应用   6.6 数据共享(ContentProviders)   6.7 小结   第7 章多媒体开发   7.1 多媒体开发详解   7.1.1 Open Core   7.1.2 MediaPlayer   7.1.3 MediaRecorder   7.2 播放音乐   7.3 播放视频   7.4 录制歌曲   7.5 相机设置   7.6 闹钟设置   7.7 铃声设置   7.8 小结   第8章 网络与通信   8.1 网络通信基础   8.1.1 无线网络技术   8.1.2 Android网络基础   8.2 HTTP通信   8.2.1 HttpURLConnection接口   8.2.2 HttpClient接口   8.2.3 实时更新   8.3 Socket通信   8.3.1 Socket基础   8.3.2 Socket应用(简易聊天室)   8.4 网络通信的中文乱码问题   8.5 WebKit应用   8.5.1 WebKjt概述   8.5.2 WebView浏览网页   8.5.3 WebView与Javascript   8.6 WtFi介绍   8.7 蓝牙   8.8 小结   第9章 Android特色开发   9.1 传感器   9.2 语音识别   9.3 GoogleMap   9.3.1 GoogleMap概述   9.3.2 准备工作   9.3.3 GoogleMapAPI的使用   9.3.4 定位系统   9.4 桌面组件   9.4.1 快捷方式   9.4.2 实时文件夹   9.4.3 Widget开发   9.5 账户管理   9.6 小结   第三部分 实例篇   第10章 Android应用开发实例   10.1 情境模式   10.2 文件管理器   10.3 通讯录   10.4 音乐播放器   10.5 天气预报   10.6 个人地图   10.7 Widget日历   10.8 小结   第11 章Android游戏开发实例   11.1 手机游戏开发简介   11.2 游戏框架设计   11.3 地图设计   11.4 主角设计   11.5 图层管理器   11.6 游戏音效   11.7 游戏存档   11.8 小结   第四部分 高级篇   第12章 AndroidOpenGL开发基础   12.1 OpenGL简介   12.2 多边形   12.3 颜色   12.4 旋转   12.5 3D 空间   12.6 纹理映射   12.7 光照和事件   12.8 混合   12.9 小结   第13章 AndroidOpenGL综合应用   13.1 移动图像   13.2.3D 世界   13.3 飘动的旗帜   13.4 显示列表   13.5 雾   13.6 粒子系统   13.7 蒙版   13.8 变形   13.9 小结   第14章 游戏引擎实现   14.1 游戏引擎介绍   14.1.1 什么是引擎   14.1.2 引擎的进化   14.1.3 常见的游戏引擎   14.1.4 Android游戏引擎   14.2 游戏引擎结构   14.2.1 游戏引擎原理   14.2.2 游戏引擎定位   14.2.3 游戏引擎框架   14.3 游戏引擎设计   14.3.1 游戏引擎结构和功能设计   14.3.2 游戏引擎设计注意事项   14.4 游戏引擎实现   14.4.1 Activity类实现   14.4.2 流程控制和线程   14.4.3 游戏对象与对象管理   14.4.4 图形引擎   14.4.5 物理引擎   14.4.6 事件模块   14.4.7 工具模块   14.4.8 脚本引擎、音效模块、网络模块   14.5 小结   第15章 优化技术   15.1 优化的基本知识   15.1.1 如何书写出优秀代码   15.1.2 编程规范   15.2 程序性能测试   15.2.1 计算性能测试   15.2.2 内存消耗测试   15.3 初级优化   15.4 高级优化   15.5 Android高效开发   15.6 AndroidUI优化   15.7 其他优化   15.7.1 zipalign   15.7.2 图片优化   15.8 小结   第五部分 扩展篇   第16章 Android NDK开发   16.1 AndroidNDK简介   16.2 安装和配置NDK开发环境   16.2.1 系统和软件需求   16.2.2 NDK开发环境搭建   16.2.3 编译第一个NDK程序   16.3 AndroidNDK开发   16.3.1 JNI接口设计   16.3.2 使用C\C++实现本地方法   16.3 编译C\C++代码   16.4 AndroidNDK中使用0penGL   16.5小结   第17章 Android脚本环境   17.1 Android脚本环境简介   17.2 Android脚本环境安装   17.3如何编写Android脚本程序   17.4小结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值