Gallery图片回传之一

本次的实现功能是这样的:从第一个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方法
}
});
}
}

最后就大功告成了.





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值