首页 > 其他分享 >PhotoView点击放大图片效果

PhotoView点击放大图片效果

时间:2023-05-01 16:09:52浏览次数:45  
标签:PhotoView list add item 点击 photoView import 放大 View


使用的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


标签:PhotoView,list,add,item,点击,photoView,import,放大,View
From: https://blog.51cto.com/u_5454003/6238916

相关文章

  • 插入随机/跟随鼠标/点击一次即消失/漂浮图片(ie测试通过)
    //跟随方法比document.click不足之处:当出现cpu占用过高时,会出现跟随不上现象,导致此次点击并不能弹出窗口varimgs=newArray("http://www.google.cn/intl/zh-CN/images/logo_cn.gif","http://hp.tom.com/images/logo.gif","htt......
  • 关于在ECside列表页面点击标题查看明细后不能回到原来所在页的问题
    [u][b]问题:[/b][/u]在使用ECside分页框架的过程中,我们在EC列表页面点击某一行记录,进入该行记录的详细信息页面,此时我们在返回时却又只能返回到第一页,不能返回原来所在的第二页。其中还有原来我们设置好的每页显示多少行,也变回原来的默认值了,排序方式也变成默......
  • element ui抽屉组件蒙版取消后,左侧内容可点击,可处理
    elementui抽屉组件都在用,然后需求提了一个底部蒙版不要,左侧正常点击,输入框正常输入,滚动正常滚动。在做的时候发现蒙版去了只是将当前蒙版的透明度更改了而已,蒙版还是在的,左侧依然点击不了后来想想把蒙版的宽度处理一下跟抽屉的宽度一样不就行了吗?说做就做 抽屉上定义class,......
  • vant中van-dialog组件点击确认按钮禁止弹窗自动关闭
    1.在van-dialog组件中添加before-close属性,2.定义该方法newGroupBefColse(action,done){if(action=='confirm'&&!this.newFenzuName.trim()){done(false)}else{done(true)}......
  • PPT实现单页多张图片点击切换
    效果:在同一张幻灯片里,点击出来第一张图片,使用完之后,鼠标点击,这张图片消失,再出来下一张图片;如此继续,直到知道所有相关图片放映结束。    其实很简单,主要用到自定义动画。将多张图片导入到同一张幻灯片中(是同一张)按出场顺序叠加,最先出来的放到最底下。然后对每一张图片按顺序......
  • 带你了解运算放大器电路设计中虚拟接地和虚拟短路重要性
    运算放大器是模拟电子设计的主力军。自远古以来,从简单的电压跟随器到复杂的逆变器设计都使用了这些不起眼的设备。在CircuitDigest,我们已经讨论了范围广泛的运算放大器电路及其应用。今天,我们将研究另一个与运算放大器相关的有趣概念,称为虚拟接地和虚拟短路。接下来就跟随IC先生ww......
  • Kotlin实战基础 - 设置点击事件、Activity跳转、传值
    基础过度Kotlin基础入门-变量、方法、对象、继承、接口Kotlin实战基础-设置点击事件、Activity跳转、传值Kotlin实战基础-Activity、Fragment传递参数尚未完整,遇缺再补-点击事件Activity跳转Activity跳转+Intent传值点击事件点击事件是基础功......
  • react点击滑块验证
     css.wrap-num{width:300px;}@keyframesdefaultWave{0%{transform:scale(1);}20%{transform:scale(1.23);}40%{transform:scale(1);}100%{transform:scale(1);}}//旋转@keyframesloadingWave{0%{......
  • 【FAQ】关于JavaScript版本的华为地图服务Map的点击事件与Marker的点击事件存在冲突的
    一. 问题描述创建地图对象,并添加marker标记,对map和marker均添加了点击事件;<body><script>functioninitMap(){//创建地图对象constmap=newHWMapJsSDK.HWMap(document.getElementById('map'),{center:{lat:39.36322,lng:......
  • Vue监听页面放大缩小事件
    Vue监听页面放大缩小事件 ,使用window.addEventListener,methods中方法ChangeWin(){letratio=this.getRatio();letPwidth=window.screen.width*this.getRatio()/100;letPHeight=window.screen.height*this.getRatio()/100;//1920*1080......