Android开发下拉关闭图片
图片会跟随手指移动,只有是下滑时才会退出查看页面,其他情况会复位,直接当做ImageView使用即可,setViewCall方法是在下滑完成后要执行的操作,上,左,右,可自行扩展
onTouchEvent 监听手指坐标,GestureDetector 监听滑动的惯性,ViewHelper设置图片位移动画
public class FriendCircleView extends android.support.v7.widget.AppCompatImageView implements GestureDetector.OnGestureListener {public FriendCircleView(Context context) {super(context);initView(context, null, 0);}public FriendCircleView(Context context, AttributeSet attrs) {super(context, attrs);initView(context, attrs, 0);}public FriendCircleView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initView(context, attrs, defStyleAttr);}//设置滑动完成后的回调方法public void setViewCall(FriendCircleViewCall viewCall) {this.viewCall = viewCall;}private void initView(Context context, AttributeSet attrs, int defStyleAttr) {screenHeight = ScreenUtils.getScreenHeight(context);detector = new GestureDetector(context, this);}private GestureDetector detector;private int screenHeight;//设备屏幕高度private float oldX, oldY;//手机放在屏幕的坐标private float movY;//移动中在屏幕上的坐标private float alphaPercent = 1f;//背景颜色透明度private boolean isFinsh = false;//是否执行关闭页面的操作private FriendCircleViewCall viewCall = null;@SuppressLint("ClickableViewAccessibility")@Overridepublic boolean onTouchEvent(MotionEvent event) {detector.onTouchEvent(event);switch (event.getAction()) {case MotionEvent.ACTION_DOWN:oldX = event.getRawX();oldY = event.getRawY();break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:if (isFinsh) {isFinsh = false;if (viewCall != null) {viewCall.viewDestry();}Log.e("ldd------", "页面返回");} else {setupUping();Log.e("ldd------", "手指抬起");}break;case MotionEvent.ACTION_MOVE:isFinsh = false;float movX = event.getRawX() - oldX;movY = event.getRawY() - oldY;setupMoving(movX, movY);if (Math.abs(movX) > Math.abs(movY)) {if (movX < 0) {Log.e("ldd------", "左滑动");} else {Log.e("ldd------", "右滑动");}} else {if (movY < 0) {Log.e("ldd------", "上滑动");} else {if (movY > (screenHeight / 6)) {isFinsh = true;Log.e("ldd------", "下滑动");}}}return false;}return true;}private void setupUping() {animate().setDuration(200).scaleX(1).scaleY(1).translationX(0).translationY(0).setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {if (alphaPercent < animation.getAnimatedFraction()) {((ViewGroup) getParent()).setBackgroundColor(convertPercentToBlackAlphaColor(animation.getAnimatedFraction()));}}}).start();}private void setupMoving(float deltaX, float deltaY) {if (Math.abs(movY) < (screenHeight / 4)) {float scale = 1 - Math.abs(movY) / screenHeight;alphaPercent = 1 - Math.abs(deltaY) / (screenHeight / 2);ViewHelper.setScaleX(this, scale);ViewHelper.setScaleY(this, scale);((ViewGroup) getParent()).setBackgroundColor(convertPercentToBlackAlphaColor(alphaPercent));}ViewHelper.setTranslationX(this, deltaX);ViewHelper.setTranslationY(this, deltaY);}//设置背景颜色透明度protected int convertPercentToBlackAlphaColor(float percent) {percent = Math.min(1, Math.max(0, percent));int intAlpha = (int) (percent * 255);String stringAlpha = Integer.toHexString(intAlpha).toLowerCase();String color = "#" + (stringAlpha.length() < 2 ? "0" : "") + stringAlpha + "000000";return Color.parseColor(color);}@Overridepublic boolean onDown(MotionEvent e) {return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {isFinsh = true;return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {return false;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {float movX = e2.getRawX() - e1.getRawX();float movY = e2.getRawY() - e1.getRawY();Log.e("ldd------2", movX + "---------" + movY);if (Math.abs(movX) > Math.abs(movY)) {if (movX < 0) {Log.e("ldd------2", "左滑动");} else {Log.e("ldd------2", "右滑动");}} else {if (movY < 0) {Log.e("ldd------2", "上滑动");} else {isFinsh = true;Log.e("ldd------2", "下滑动");}}return true;}public interface FriendCircleViewCall {void viewDestry();}
}
Android开发下拉关闭图片相关推荐
- [安卓开发] 下拉框Spinner与适配器ArrayAdapter/SimpleAdapter的使用
目录 简单介绍Spinner和Adapter ArrayAdapter实现以对话框形式展示下拉框(纯文字) Simple实现以对话框形式展示下拉框(图片加文字) 简单介绍Spinner和Adapter ...
- css下拉点击不动,CSS3 - 进行简单的点击下拉[关闭](CSS3 - Making a simple click-dropdown [closed])...
CSS3 - 进行简单的点击下拉[关闭](CSS3 - Making a simple click-dropdown [closed]) 有人可以帮助我使用与此页面相同的下拉列表的代码吗? 我想做同样 ...
- 安卓美化——添加下拉菜单图片或下拉菜单透明
想必下拉菜单有一个背景图片会让人觉得特酷的感觉~ 具体的过程不难: 1.反编译SystemUI.apk(如何反编译请戳:http://blog.csdn.net/u012336923/article/ ...
- 仿QQ空间,百思不得姐下拉刷新图片放大
1.概述 实习生进阶到项目部分会带他们做一个百思不得姐项目,那么个人主页就有类似于QQ空间下拉图片放大的效果,趁着现在还闲就实现一下效果: 2.实现 1. 效果分析 ScrollView和ListVi ...
- Xamarin. Android实现下拉刷新功能
PS:发现文章被其他网站或者博客抓取后发表为原创了,给图片加了个水印 下拉刷新功能在安卓和iOS中非常常见,一般实现这样的功能都是直接使用第三方的库,网上能找到很多这样的开源库.然而在Xamarin. ...
- android listview下拉刷新动画,android 安卓 listview 支持下拉刷新 上拉加载更多
[1]重写listViewimport java.text.SimpleDateFormat; import java.util.Date; import com.example.testdddlea ...
- 【SwiftUI模块】0012、SwiftUI-搭建一个类似微博、网易云、抖音个人页面的头部下拉放大图片效果
SwiftUI模块系列 - 已更新11篇 SwiftUI项目 - 已更新1个项目 往期Demo源码下载 技术:SwiftUI.SwiftUI3.0.下拉放大.tableview粘性头部.头部下拉放大图 ...
- android代码下拉刷新页面,Android下拉刷新的实现
ListView下拉刷新实现方式分析 1.添加顶部下拉加载界面. 2.监听onScrollListener,来判断当前是否在ListView最顶部. 3.监听onTouch事件,根据手势变化改变当前状 ...
- android菜单回弹,Android ScrollLayout 下拉回弹
Android ScrollLayout 下拉回弹 import android.content.Context; import android.graphics.PointF; import and ...
最新文章
- 前端开发中的性能那点事
- VS2015+openGL配置
- ng-options渲染的第一项为空的解决办法
- 使用trash-cli防止rm -rf 误删除带来的灾难(“事前”非“事后”)
- python cnn图像分类_关于CNN图像分类的一份综合设计指南
- 第三次学JAVA再学不好就吃翔(part48)--String类的判断功能
- java水泡_JAVA图像处理系列(八)——艺术效果:水泡
- 【转载】教你使用 Reflexil 反编译.NET
- 软件开发工作量评估:基于FPA功能点分析法的深入解读
- Microsoft Visual Studio 的下载与安装(傻瓜式)
- 三维地震数据segy数据显示
- 【Mac 系统下载 解压 ImageNet-1k(ILSVRC2012、IN1K)数据集】
- 计算机c盘删除的文件怎么找回,两分钟恢复电脑误删除的文件数据
- C# Spire.Pdf 无限制 使用教程
- LOMO+XQDA(2015CVPR)
- 在vue中把数据导出Excel文件
- JDK源码下载:http://download.java.net/openjdk/jdk7
- 在c语言程序中,数组名做函数调用的实参时,传递给形参的是,若用数组名作为函数调用时的实参,则实际上传递给的形参的是(C)...
- wps的word文档怎么全选内容_word全选的快捷键 选择Word文档内容小技巧
- 基于微信小程序的家政服务预约系统设计与实现毕业设计毕设开题报告参考
热门文章
- stylus 直转 css
- 爬虫——scrapy下载图片
- openwrt安装蒲公英_不会OpenWRT、软路由也能双宽带叠加,蒲公英X6快速上手体验
- 3dmax导入Sketchup 模型位置错乱的解决方法
- 六安毛坦厂2021年高考成绩查询,六安市毛坦厂中学召开2021年高考誓师大会
- show running-config命令
- java显示65289_2018成人高考高起点语文病句识别#65288;1#65289;
- 银弹谷V-DevSuite部署构件时提示无法连接到远程服务器
- 全球各类开放式数据库获取渠道汇总
- 警方为您送上网购安全大红包