开发一个特别简单的小安卓应用,主要做了这些事情:
1、配置activity_main.xml文件
放置一个TextView和一个ListView,TextView用于显示文本,ListView设置id问listview0用于放置多个Item;
Item的position(位置)和Id(第几行)都是从0开始(onItemClick(AdapterView<?> arg0, View view,int position, long id) )
2、新建listview0.xml文件
放置一个ImageView,用于显示图片。此文件布局即为上面ListView中一个Item的布局。
3、为ListView配置数据源
由于listview0.xml里面只有一个ImageView,所以数据设置为以下方法:
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = null; int imgs[] = new int[] { R.drawable.buyno, R.drawable.quno }; for (int i = 0; i < imgs.length; i ) { map = new HashMap<String, Object>(); map.put("imageview", imgs[i]); list.add(map); } return list; }
适配器将数据配置到ListView中
SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.listview01, new String[] { "imageview" }, new int[] { R.id.imageview }); listView.setAdapter(adapter);
4. ListView中Item点击事件:
传递Item的Id给下一个Avtivity用启动,以确保点击不同Item响应不同事件。
listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View imageView, int position, long id) { Intent intent = new Intent(); intent.putExtra("position", position ""); intent.setClass(MainActivity.this, ChoiceActivity.class); startActivity(intent); } });
5、配置菜单:(菜单开发1)
在menu文件夹下配置main.xml中的item并设置Id,用于点击Item时的区分。
6、菜单点击事件:
根据Item的ID响应不同事件。
public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.exit0) { //退出 MainActivity.this.finish(); return true; } return super.onOptionsItemSelected(item); }
7、配置另一个Activity的布局文件choice.xml
放置一个ImageView和两个按钮并居中
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@ id/imageview2" android:src="@drawable/think" android:layout_width="fill_parent" android:layout_height="300dp" android:contentDescription="@string/think" android:layout_gravity="center" />
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" >
<Button android:id="@ id/choiceButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/chose" android:layout_gravity="center_horizontal" />
<Button android:id="@ id/exitbutton" android:text="@string/back" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
8、启动另一个Activity时获取数据
Intent intent = this.getIntent(); position = intent.getStringExtra("position");
9、根据不同的Item点击事件来设置不同的图片(根据posotion来判断)
//填充图片 private int[] getImgs() { int imgs[] = new int[2]; if("0".equals(position)){ imgs[0] = R.drawable.buy; imgs[1] = R.drawable.nobuy; }else if("1".endsWith(position)){ imgs[0] = R.drawable.go; imgs[1] = R.drawable.nogo; } return imgs; }
10、ImageVIew和Buttond的点击事件
点击一次随机获取图片
//转换图片 private Drawable changeImg(int[] imgs) { Drawable drawable; int num = (int)(Math.random()*3); if(num>=0&&num<1){ drawable = getResources().getDrawable(imgs[0]); }else if(num>=1&&num<2){ drawable = getResources().getDrawable(R.drawable.think); }else{ drawable = getResources().getDrawable(imgs[1]); } return drawable; }
主干:
Drawable drawable = null ; int[] imgs = getImgs(); drawable = changeImg(imgs); imageView.setImageDrawable(drawable);
10、添加菜单并设置点击事件(菜单开发2)
copy别人高质量代码如下
//创建菜单 @Override public boolean onCreateOptionsMenu(Menu menu) {
/* * * add()方法的四个参数,依次是: * * 1、组别,如果不分组的话就写Menu.NONE, * * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 * * 3、顺序,那个菜单现在在前面由这个参数的大小决定 * * 4、文本,菜单的显示文本 */
menu.add(Menu.NONE, Menu.FIRST 1, 5, "有待开发").setIcon(
android.R.drawable.ic_menu_delete);
// setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
// android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
menu.add(Menu.NONE, Menu.FIRST 2, 2, "有待开发").setIcon(
android.R.drawable.ic_menu_edit);
menu.add(Menu.NONE, Menu.FIRST 3, 6, "退出").setIcon(
android.R.drawable.ic_menu_help);
menu.add(Menu.NONE, Menu.FIRST 4, 1, "有待开发").setIcon(
android.R.drawable.ic_menu_add);
menu.add(Menu.NONE, Menu.FIRST 5, 4, "有待开发").setIcon(
android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE, Menu.FIRST 6, 3, "有待开发").setIcon(
android.R.drawable.ic_menu_send); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Menu.FIRST 1:
Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST 2:
Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST 3:
ChoiceActivity.this.finish(); break;
case Menu.FIRST 4:
Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST 5:
Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST 6:
Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
break;
} return true; }
番外:添加摇一摇换图片功能:
首先需实现接口SensorEventListener
1、声明传感器管理和振动器
//传感器管理类 private SensorManager sensorManager; //振动器 private Vibrator vibrator;
2、获取系统服务
在OnCreate函数中
//传感器 sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); //震动 vibrator = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
3、注册监听
重载OnResume函数
//注册监听 sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
4、解除监听
重载OnPause函数
sensorManager.unregisterListener(this);
5、摇一摇响应事件
粘贴别人高质量代码
@Override public void onSensorChanged(SensorEvent event) {
int sensorType = event.sensor.getType(); //values[0]:X轴,values[1]:Y轴,values[2]:Z轴 float[] values = event.values; if (sensorType == Sensor.TYPE_ACCELEROMETER) { if ((Math.abs(values[0]) > 17 || Math.abs(values[1]) > 17 || Math .abs(values[2]) > 17)) {
/*主要响应事件*/ Drawable drawable = null ; int[] imgs = getImgs(); drawable = changeImg(imgs); imageView.setImageDrawable(drawable);
/*响应事件结束*/ //摇动手机后,再伴随震动提示~~ vibrator.vibrate(500); } } }