`

PhotoView点击放大图片效果

阅读更多
使用的PhotoView是这个版本的,比较小巧,很好用,比github上另一个版本的瘦身很多:
https://github.com/bm-x/PhotoView

基本测试代码如下:
import java.util.ArrayList;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.widget.common.recycler.BaseRecyclerAdapter;
import com.widget.common.recycler.SpacesItemDecoration;
import com.widget.common.recycler.ViewHolder;
import com.widget.photoView.Info;
import com.widget.photoView.PhotoView;

/**
 * 测试PhotoView代码
 * @author pythoner
 * 
 */
public class GridImageActivity extends BaseActivity {

	private Context context;
	private RecyclerView recyclerView;
	private BaseRecyclerAdapter<Integer> adapter;
	private PhotoView photoView;//变换后的图片
	private PhotoView curPhotoView;//源图片
	private Info mRectF;//源图片位置信息
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_grid_image);
		context = this;
		initActionBar("图片列表", null, null);
		initViews();
	}

	@Override
	public void initViews() {
		// TODO Auto-generated method stub
		initRecyclerView();
		photoView=(PhotoView)findViewById(R.id.photoView);
		photoView.enable();// 需要启动缩放需要手动开启
		photoView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 从自身位置变换到源图片的位置
            	photoView.animaTo(mRectF, new Runnable() {
                    @Override
                    public void run() {
                    	photoView.setVisibility(View.GONE);
                    	curPhotoView.setVisibility(View.VISIBLE);
                    }
                });
            }
        });
	}

	private void initRecyclerView() {
		recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
		// recyclerView.addItemDecoration(new DividerGridItemDecoration(this));
		recyclerView.addItemDecoration(new SpacesItemDecoration(16));
		recyclerView.setItemAnimator(new DefaultItemAnimator());
		GridLayoutManager manager = new GridLayoutManager(this, 3);
		recyclerView.setLayoutManager(manager);

		final ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(R.drawable.bg_login);
		list.add(R.drawable.chat_bg_default);
		list.add(R.drawable.bg_diagonal);
		list.add(R.drawable.bg_diagonal);
		list.add(R.drawable.chat_bg_default);
		list.add(R.drawable.bg_login);
		list.add(R.drawable.bg_login);
		list.add(R.drawable.chat_bg_default);
		list.add(R.drawable.bg_diagonal);
		list.add(R.drawable.bg_diagonal);
		list.add(R.drawable.chat_bg_default);
		list.add(R.drawable.bg_login);

		recyclerView.setAdapter(adapter = new BaseRecyclerAdapter<Integer>(
				context, list) {

			@Override
			public int onCreateViewLayoutID(int viewType) {
				// TODO Auto-generated method stub
				return R.layout.item_grid_image;
			}

			@Override
			public void onBindViewHolder(ViewHolder holder, final Integer item,
					final int position) {
				// TODO Auto-generated method stub
				final PhotoView item_0=holder.getView(R.id.item_0);
				item_0.disenable();
				item_0.setImageResource(item);
				
				item_0.setOnClickListener(new View.OnClickListener() {
		            @Override
		            public void onClick(View v) {
		            	curPhotoView=item_0;
		            	item_0.setVisibility(View.GONE);
		            	photoView.setVisibility(View.VISIBLE);
		            	photoView.setImageResource(item);
		                //获取源位置信息
		                mRectF = item_0.getInfo();
		                //从源位置变换到他本身的位置
		                photoView.animaFrom(mRectF);
		            }
		        });
				
			}
		});

	}

	@Override
    public void onBackPressed() {
        if (photoView.getVisibility() == View.VISIBLE) {
        	photoView.animaTo(mRectF, new Runnable() {
                @Override
                public void run() {
                	photoView.setVisibility(View.GONE);
                	curPhotoView.setVisibility(View.VISIBLE);
                }
            });
        } else {
            super.onBackPressed();
        }
    }
	
	@Override
	public void updateViews(Object obj) {
		// TODO Auto-generated method stub
	}

}


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <include layout="@layout/actionbar_comm" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical" />
    </LinearLayout>

    <com.widget.photoView.PhotoView
        android:id="@+id/photoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:scaleType="fitCenter"
        android:src="@drawable/bg_login"
        android:visibility="gone" />

</FrameLayout>


GridImageView网格图片控件
https://github.com/A-W-C-J/GridImageView

ImageWatcher
图片查看器,为各位追求用户体验的daLao提供更优质的服务 它能够
1、点击图片时以一种无缝顺畅的动画切换到图片查看的界面,同样以一种无缝顺畅的动画退出图片查看界面
2、支持多图查看,快速翻页,双击放大,单击退出,双手缩放旋转图片
3、下拽退出查看图片的操作,以及效果是本View的最大卖点(仿微信)
https://github.com/iielse/DemoProjects/tree/master/P02_ImageWatcher



仿微博、微信、qq 点击缩略图后预览高清图的组件

TransferImage 是一款模仿微博、微信、qq的高清图查看控件, 实现了在列表控件(ListView, RecycleView, GridView 等...)中 点击缩略图后播放过渡动画, 加载高清图, 加载高清图时同时显示加载进度条, 加载完成后显示高清图的一个组件。同时关闭 TransferImage 也会有对应的过渡动画.

此库若有不完善的地方, 请提 Issues, 我会尽快修复改善

支持或包含的功能:

打开和关闭 TransferImage 的过渡动画, 支持自定义
图片加载内置了一个使用 Glide 框架的图片加载器, 支持自定义
图片支持手势操作, 可缩放、双击、移动
图片加载时的进度条, 支持自定义
图片索引指示器, 支持自定义
https://github.com/Hitomis/TransferImage
分享到:
评论

相关推荐

    仿网易新闻点击图片放大效果支持viewpager

    它可能包含了自定义的ViewPager实现,以及图片点击放大逻辑的代码。在实际项目中,我们可以创建一个名为QuickViewPagerAdapter的适配器,用于填充ViewPager的内容,同时在适配器中处理图片的点击事件,启动图片查看...

    通过PhotoView来实现微信朋友圈的图片预览效果

    通过以上步骤,你可以成功地使用PhotoView实现微信朋友圈的图片预览效果。不过,需要注意的是,实际开发中可能还需要处理各种边界情况和异常,比如图片加载失败、手势冲突等问题。因此,对Android的基础知识和异常...

    PhotoView 手势缩放 双击缩放 图片滑动 支持viewpager

    3. **双击缩放**:双击缩放是PhotoView的另一项特色功能,允许用户通过快速连续点击两次来实现图片的放大或缩小。这一功能通常用于快速切换图片的预览和全屏模式,提高了用户操作的便捷性。 4. **图片滑动**:...

    android之实现图片左右滑动 点击放大功能.zip

    在Android应用开发中,实现图片左右滑动以及点击放大的功能是常见的需求,尤其是在设计相册、图片浏览器或者产品展示类应用时。这个压缩包文件"android之实现图片左右滑动 点击放大功能.zip"可能包含了一个示例项目...

    flutter实现可缩放可拖拽双击放大的图片功能

    创建一个`GestureDetector`包装`PhotoView`,监听`onTapDown`事件,判断连续两次点击的时间间隔是否满足双击条件,然后根据当前缩放级别调整图片大小。 ```dart GestureDetector( onDoubleTap: () { setState(...

    图片预览,点击放大且滑动浏览效果

    本教程将详细介绍如何使用`PhotoView`库实现一个功能完善的图片预览功能,包括点击放大和滑动浏览的效果。`PhotoView`是一个专为Android平台设计的库,它允许用户对图片进行缩放和平移,提供了类似Google Maps的交互...

    Android使用PhotoView实现图片双击放大单击退出效果

    当用户点击图片时,`onPhotoTap`方法会被调用,参数`x`和`y`表示点击位置相对于图片的坐标,我们在这里直接调用`finish()`来关闭当前活动,实现单击退出的效果。 除了基本的双击放大和单击退出,`PhotoView`还支持...

    点击图片放大源码

    首先,我们可以采用HTML和CSS的基本方法来创建一个基础的点击放大效果。HTML用于布局和图像插入,CSS则用来定义样式和交互。例如,可以设置两个图像元素,一个为原图,一个为放大部分,初始时隐藏放大图。当用户点击...

    防微信朋友圈图片点击放大可删除-AS

    标签“viewpager 循播 点击放大”暗示了这个功能可能使用了`ViewPager`组件来实现图片的滑动浏览效果。`ViewPager`是Android SDK中的一个视图容器,它允许用户左右滑动切换多个页面,常用于实现类似相册的效果。为了...

    Android photoview jar包

    5. **回调事件**:提供了多种回调接口,如OnPhotoTapListener和OnViewTapListener,可以让开发者在用户点击或触摸图片时执行特定操作。 6. **兼容性**:Android Photoview库旨在支持多个Android版本,从早期的API...

    PhotoView android jar包

    `PhotoView`库允许用户通过简单的触摸手势(如双击、捏合等)来放大和缩小图片,从而提供更丰富的用户体验。 `PhotoView`的核心特性包括: 1. **手势缩放**:`PhotoView`实现了Android的`GestureDetector`和`...

    PhotoView-master-2.3.0.zip

    同时,PhotoView还提供了丰富的回调接口,如OnPhotoTapListener和OnMatrixChangedListener,可以让开发者监听图片的点击和矩阵变化事件,实现更复杂的交互逻辑。 总的来说,PhotoView是Android平台上一个强大且灵活...

    PhotoView_eclipse

    1. **图片缩放**:用户可以通过双击或者双指捏合手势对图片进行放大和缩小,提供了类似Google Maps的平滑缩放体验。 2. **图片平移**:允许用户通过滑动手指在图片上移动,查看图片的不同部分。 3. **手势检测**:库...

    仿淘宝,京东商品详细图片的viewpager,点击图片放大,左右滑动

    7. **图片放大功能**:为了实现图片点击放大,可以使用Zoomable ImageView库,如PhotoView或Universal Image Loader,它们支持手势缩放和拖动。当用户点击图片时,启动一个新的Activity或Fragment,将当前图片传入并...

    安卓Android源码——图片左右滑动 点击放大.rar

    本资源"安卓Android源码——图片左右滑动 点击放大.rar"提供了一个实现图片左右滑动切换和点击放大的源代码示例,这对于开发者来说是非常有价值的参考材料。下面我们将深入探讨这个主题。 首先,让我们了解核心概念...

    Android-MultiselectPhotoView图片多选和图片预览手势放大缩小的效果

    `Android-MultiselectPhotoView`是一个专为实现图片多选和图片预览功能的库,它基于`PhotoView`库,支持手势缩放和滚动,提供了良好的用户体验。下面我们将详细探讨这个项目中的核心知识点。 1. **PhotoView库**: ...

    android-GridView显示图片点击放大.zip

    本项目“android-GridView显示图片点击放大”提供了一个实现GridView显示图片并支持点击放大的示例,非常适合初学者学习和开发者参考。 GridView的核心在于适配器(Adapter),它是数据源与视图之间的桥梁。在这个...

    Android应用源码之图片左右滑动 点击放大.rar

    这个压缩包中的源码示例专注于实现一个功能:图片左右滑动浏览以及点击放大。这个功能在许多应用中都很常见,例如相册应用、社交媒体应用等。下面我们将深入探讨实现这一功能所涉及的关键知识点。 1. **图片加载库*...

    类淘宝,京东的viewpager带放大,左右滑动

    将`PhotoView`集成到`ViewPager`中,每个页面都可以承载一个可放大的图片,当用户点击图片时,可以进入放大模式,同时仍然保持滑动切换其他页面的能力。 接下来,我们要关注的是左右滑动的实现。`ViewPager`本身就...

Global site tag (gtag.js) - Google Analytics