Eg:Gallery与ImageSwitcher结合的图片浏览小程序

先来看一下程序运行截图:

//

1.Gallery功能模块的实现:

    1.1.res/layout,相应的xml文件中添加<Gallery/>元素,注意布局文件是相对布局(RelativeLayout)

   

<Gallery
    android:id="@+id/gallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"/>
    1.2.activity中Gallery实例化

Gallery gallery = (Gallery) findViewById(R.id.gallery);
    1.3.为项目添加图片资源(sample_1~sample_7)

   

    1.4.为Gallery定制适配器(adapter)

//定制适配器
    public class ImageAdapter extends BaseAdapter {
        int mGalleryItemBackground;
        private Context mContext;

        private Integer[] mImageIds = {
                R.drawable.sample_1,
                R.drawable.sample_2,
                R.drawable.sample_3,
                R.drawable.sample_4,
                R.drawable.sample_5,
                R.drawable.sample_6,
                R.drawable.sample_7
        };

        public ImageAdapter(Context c) {
            mContext = c;
            TypedArray attr = mContext.obtainStyledAttributes(R.styleable.HelloGallery);
            mGalleryItemBackground = attr.getResourceId(
                    R.styleable.HelloGallery_android_galleryItemBackground, 0);
            attr.recycle();
        }

        public int getCount() {
            return mImageIds.length;
        }

        public Object getItem(int position) {
            return null;
        }

        public long getItemId(int position) {
            return mImageIds[position];
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView = new ImageView(mContext);

            imageView.setImageResource(mImageIds[position]);
            imageView.setLayoutParams(new Gallery.LayoutParams(150, 100));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageView.setBackgroundResource(mGalleryItemBackground);

            return imageView;
        }
    }

    1.5.为Gallery实例设置适配器

final ImageAdapter myImageAdapter=new ImageAdapter(this);
gallery.setAdapter(myImageAdapter);

2.ImageSwitcher功能模块的实现:

    2.1.为activity添加(实现)ViewFactory接口

public class Ch04_GalleryWithImageSwitcherActivity extends Activity implements ViewFactory{...}
    2.2.实现该接口的函数(该函数用来创建View并返回给ImageSwitcher实例)
   /**   
     * override for ViewSwitcher.ViewFactory#makeView()
     */
	@Override
	public View makeView() {
		// TODO Auto-generated method stub
		ImageView tmp_imageView=new ImageView(this);
		tmp_imageView.setBackgroundColor(0xff0000);
		tmp_imageView.setScaleType(ImageView.ScaleType.FIT_XY);
		tmp_imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
		return tmp_imageView;
	}
    2.3.res/layout,<Gallery/>标签所在的布局文件xml中添加<ImageSwitcher/>,注意<ImageSwitcher>标签一定要在<Gallery/>标签前面

<ImageSwitcher android:id="@+id/switcher"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
    />

    2.2.ImageSwitcher实例化,并进行动态设置

        //ImageSwitcher
        mSwitcher=(ImageSwitcher)findViewById(R.id.switcher);
        mSwitcher.setFactory(this);
        //设置动态效果
        mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_in_left));
        mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_out_right));

3.将两者结合起来(通过给Gallery设置监听器,并在监听器中调用ImageSwitcher实例的setImageResource()函数):

   

        mSwitcher.setImageResource((int) myImageAdapter.getItemId(0));  //为ImageSwitcher设置默认图片
        gallery.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(Ch04_GalleryWithImageSwitcherActivity.this, "" + position, Toast.LENGTH_SHORT).show();
                mSwitcher.setImageResource((int) myImageAdapter.getItemId(position));
            }
        });
//本文涉及资源:

   1.本文对应实例源代码

大图查看,它能够动画顺畅切换到查看状态,同样动画顺畅退出查看界面左右滑动多图查看仿微信下拽退出   示例下载在 previews文件夹下 app-debug.apk app-debug.apk对比之前1.0.3,修复-宽高计算错误导致起始图片位置显示错误。优化-取消了无意义的旋转,提示下拽体验(放大且图片已显示顶端时亦可下拽)。优化-支持显示本地图片。新增-支持长图显示(beta)。 使用的网络图片,被屏蔽了请自己换地址,或提醒我。新增-自定义loadingUI新增-自定义indexUI集成Add it in your root build.gradle at the end of repositories:allprojects {     repositories {         ...         maven { url 'https://jitpack.io' }     } }Add the dependencydependencies {     implementation 'com.github.iielse:ImageWatcher:1.1.0' }初始化API简介namedescription*setLoader*图片地址加载的实现者setTranslucentStatus当没有使用透明状态栏,传入状态栏的高度setErrorImageRes图片加载失败时显示的样子setOnPictureLongPressListener长按回调setIndexProvider自定义页码UIsetLoadingUIProvider自定义加载UIsetOnStateChangedListener开始显示和退出显示时的回调初始化配置Activity.onCreate()vImageWatcher = ImageWatcherHelper.with(this) // 一般来讲,ImageWatcher尺寸占据全屏     .setLoader(new GlideImageWatcherLoader()) // demo中有简单实现     .setIndexProvider(new DotIndexProvider()) // 自定义     .create();Activity.onBackPressed()if (!vImageWatcher.handleBackPressed()) {     super.onBackPressed(); }使用ImageView clickedImage = 被点击的ImageView; SparseArray<ImageView> mapping = new SparseArray<>(); // 这个请自行理解, mapping.put(0, clickedImage); List<Uri> dataList = 被显示的图片们; vImageWatcher.show(clickedImage, mapping, dataList);具体看源码demo示例。项目可运行。欢迎提出问题/想法。楼主也许可能会更新,比如这次 /斜眼笑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值