前段时间弄了2个Gallery跟ImageSwitcher实现了图片浏览。
今天介绍一种在对话框上实现图像选择。
先声明,是借鉴别人的做法,觉得确实很好。
实现的效果如下:
部分关键代码如下:
对话框的设置:
重点是
setView(imageChooseView)
这个属性
public void initImageChooseDialog() {
if(imageChooseDialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择图像")
.setView(imageChooseView).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
imageChanged = true;
previousImagePosition = currentImagePosition;
imageButton.setImageResource(images[currentImagePosition%images.length]);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
currentImagePosition = previousImagePosition;
}
});
imageChooseDialog = builder.create();
}
}
加载图片的方法:
public void loadImage() {
if(imageChooseView == null) {
LayoutInflater li = LayoutInflater.from(AddNew.this);
imageChooseView = li.inflate(R.layout.imageswitch, null);
//通过渲染xml文件,得到一个视图(View),再拿到这个View里面的Gallery
gallery = (Gallery)imageChooseView.findViewById(R.id.gallery);
//为Gallery装载图片
gallery.setAdapter(new ImageAdapter(this));
gallery.setSelection(images.length/2);
is = (ImageSwitcher)imageChooseView.findViewById(R.id.imageswitch);
is.setFactory(this);
is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
//卸载图片的动画效果
is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView> arg0, View arg1,
int arg2, long arg3) {
//当前的头像位置为选中的位置
currentImagePosition = arg2;
//为ImageSwitcher设置图像
is.setImageResource(images[arg2 % images.length]);
}
@Override
public void onNothingSelected(AdapterView> arg0) {
}});
}
}
重点,adapter的写法:
class ImageAdapter extends BaseAdapter {
private Context context;
public ImageAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
/**
* gallery从这个方法中拿到image
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv = new ImageView(context);
iv.setImageResource(images[position%images.length]);
iv.setAdjustViewBounds(true);
iv.setLayoutParams(new Gallery.LayoutParams(80,80));
iv.setPadding(15, 10, 15, 10);
return iv;
}
}
//这个是重写的的方法,我给加上注释。我是百度了很久也没找到这个方法的解释。只要对着有道看的源码~~ TAT
@Override
public View makeView() {
ImageView view = new ImageView(this);
view.setBackgroundColor(0xff000000);//设置背景边框颜色?
view.setScaleType(ScaleType.FIT_CENTER);//设置 显示的类型 居中显示
view.setLayoutParams(new ImageSwitcher.LayoutParams(90,90));//设置显示的图片大小
return view;
}