本次的实现功能是这样的:从第一个Activity中,跳到第二个Activity,从中取得Gallery中的图片,并回传给第一个Activity,用的是传递图片的ID,闲话少说:
一,在第一个Activity里面定义了一个Button和一个ImageView,Button的单击事件里面,调用Intent,注意的是:在跳转时,用的不是intent的startActivity的方法而是startActivityForResult(intent,1);startActivityForResult的第二个参数必须大于0,回调才有用。使用了startActivityForResult方法,就要用onActivityResult来获取返回值,在这里刚好返回从gallery里面所选图片的ID,让其在ImageView上显示。
示例如下:
public class Main extends Activity {
Button choosepic_btn;
ImageView settings_photochange_imageview;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
choosepic_btn = (Button) findViewById(R.id.choose_btn);
settings_photochange_imageview=(ImageView)findViewById(R.id.setting_photoChange_iv);
choosepic_btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this,GalleryDemo.class);
//startActivityForResult的第二个参数必须大于0,回调才有用
startActivityForResult(intent, 1);
}
});
}
//使用了startActivityForResult方法,就要用onActivityResult来获取返回值,在看下面的代码钱最好先看Gallery的实现,也就是下面我讲的第二块
@Override
protected void onActivityResult(int requestCode, int resultCode //该参数是作为判断标识的
, Intent data //data里面得到的就是传递过来的图片ID
) {
// TODO Auto-generated method stub根据回传过来的标识进行判断,这里在第二个if语句里本来想另外再从本地加载图片,这里没写,但可这么做,如果需要的话.
if(resultCode == GalleryDemo.FROMR){int imageUrl = data.getIntExtra("image", R.drawable.one);
System.out.println(imageUrl);
//将得到的图片给ImageView显示出来
settings_photochange_imageview.setImageResource(imageUrl);}
if(resultCode == GalleryDemo.FROMLOCAL){
/*
String imageUrl = data.getStringExtra("image");
Drawable d = Drawable.createFromPath(imageUrl);settings_photochange_imageview.setImageDrawable(d);
d = null; */
}
super.onActivityResult(requestCode, resultCode, data);
}
二,在第二个Activity里面我们定义一个Gallery,并重写一个ImageAdapter(继承自BaseAdapter)来填充 Gallery。ImageAdapter示例如下:
主要就是重写BaseAdapter里面的几个方法,不多说。
public class ImageAdapter extends BaseAdapter {
private Integer[] imageIds = null;
private Context mcontext;
// private Integer[] imageIds={R.drawable.one,
// R.drawable.two,R.drawable.bluesky,R.drawable.play
// };
public ImageAdapter(Integer[] imgIds,Context c){
mcontext=c;
imageIds=imgIds;
}
public int getCount() {
// TODO Auto-generated method stub
return imageIds.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
//getView里面布局可以自己写,具体想要什么效果据情况而定
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView imageview = new ImageView(mcontext);
imageview.setImageResource(imageIds[position]);
imageview.setLayoutParams(new Gallery.LayoutParams(120,120));//该方法是设置图片的大小
imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
return imageview;
}
下面就是Gallery的填充和实现它的侦听事件:
public class GalleryDemo extends Activity {
//用户判断图片的url 是从资源文件来的。还是。本地的图片选择来的
public static int FROMR = 10;
public static int FROMLOCAL = 11;
private Gallery g;
private Button choosepic_local_btn;
private int selectedIndex=-1;
private Integer[] imageIds={R.drawable.one,
R.drawable.two,R.drawable.bluesky,R.drawable.play};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.choosepic);
doGallery();
dealLocal();
}
public void doGallery() {
g = (Gallery) findViewById(R.id.choosepic_gallery);
g.setAdapter(new ImageAdapter(imageIds,this));
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(GalleryDemo.this, "成功", Toast.LENGTH_SHORT)
.show();
selectedIndex=arg2;
int source = imageIds[selectedIndex]; //这里我们把选到的图片的ID给了source,冰通过Intent传递给了Main
System.out.println("source "+source);
Intent aintent = new Intent(GalleryDemo.this, Main.class);
aintent.putExtra("image", source);
setResult(FROMR,aintent); //这里就是设置判断的标识
finish();//最后别忘了调用finish方法
}
});
}
}
最后就大功告成了.