前段时间弄了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;
- }
<!--EndFragment-->