ViewPager相片打标签

2024-04-09 06:38
文章标签 标签 viewpager 相片

本文主要是介绍ViewPager相片打标签,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

世面上现在有很多图片分享社交类app都喜欢加上打标签这个功能,比如比较知名“nice”、“理理相册”等等,他们打标签的方式可能各不相同但是本质原理是一样的,我感觉理理相册做的很好,于是参照它的交互模式自己实现了一下,基本做到了高仿。

项目简述

  • 通过ToolBar的menu菜单点击添加标签;

  • 作为ViewPager外嵌套一层帧布局使用,解决了和ViewPager的滑动冲突;

  • 随意在界面拖动标签,加入严格的边界控制;

  • 具备标签点击进行编辑修改和长按删除标签的功能;

  • 标签点加入view视图动画效果;

  • 随着ViewPager切换当前界面的标签会相应的销毁和创建;

这里贴出标签帧布局核心代码:

    @Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mTouchView = null;mStartX = (int) event.getX();mStartY = (int) event.getY();if(hasView(mStartX,mStartY)){mStartTouchViewLeft = mTouchView.getLeft();mStartTouchViewTop = mTouchView.getTop();mStartTime = System.currentTimeMillis();return true;}break;case MotionEvent.ACTION_MOVE:moveView((int) event.getX(),(int) event.getY());break;case MotionEvent.ACTION_UP:mEndTime = System.currentTimeMillis();int endX = (int) event.getX();int endY = (int) event.getY();ArrayList<TagItem> tagItems = mAllTag.get(new Integer(mCurrentPosition));tagItems.get(mTouchView.getLocation()).setX(endX);tagItems.get(mTouchView.getLocation()).setY(endY);tagItems.get(mTouchView.getLocation()).setDx(mStartX -mStartTouchViewLeft);tagItems.get(mTouchView.getLocation()).setDy(mStartY -mStartTouchViewTop);Log.e(TAG,"ACTION_UP"+mTouchView.getLocation());//如果挪动的范围很小,并且时间间隔超过500,则判定为长按点击if(mTouchView!=null&& Math.abs(endX - mStartX)<CLICKRANGE&& Math.abs(endY - mStartY)<CLICKRANGE&&(mEndTime - mStartTime) > 500){removeItem();}else if (mTouchView!=null&& Math.abs(endX - mStartX)<CLICKRANGE&& Math.abs(endY - mStartY)<CLICKRANGE){editItem();}else{mTouchView = null;}break;}return false;}

在down事件按下的时候,我们判断该触摸点是否存在有标签,如何存在的话进行事件处理否则交给viewpager处理,其次在up事件结束的时候我们处理点击和长按事件对标签进行相应的处理。

再看看我们对viewpager滑动监听过程中的处理:

        mVpContainer.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {mToolbar.setTitle((mCurrPosition = position) + 1 + "/" + mUrls.size());//处理标签mPtyConver.setCurrentPosition(position);mPtyConver.removeAllViews();//清空标签Map<Integer, ArrayList<TagItem>> allTag = mPtyConver.getAllTag();if (allTag.get(new Integer(position)) != null) {ArrayList<TagItem> tagItems = allTag.get(new Integer(position));for (int i = 0; i < tagItems.size(); i++) {Log.e(TAG, "onPageSelected+setItem");mPtyConver.setItem(tagItems.get(i).getX(), tagItems.get(i).getY(), tagItems.get(i).getName(),i, tagItems.get(i).getDx(), tagItems.get(i).getDy());}}}@Overridepublic void onPageScrollStateChanged(int state) {}});

当viewpager界面进行滑动的时候我清除当前界面的所有标签,然后取出下一个界面的标签重新设置上去,这里的dx dy 是我们手指触摸点和标签的getLeft()距离的偏差,处理这个后标签的位置才是正确的。

看看效果图:


这里写图片描述

demo下载地址:

TagViewPager喜欢的话随手点个star 多谢。

这篇关于ViewPager相片打标签的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887436

相关文章

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

使用Python和Tkinter实现html标签去除工具

《使用Python和Tkinter实现html标签去除工具》本文介绍用Python和Tkinter开发的HTML标签去除工具,支持去除HTML标签、转义实体并输出纯文本,提供图形界面操作及复制功能,需... 目录html 标签去除工具功能介绍创作过程1. 技术选型2. 核心实现逻辑3. 用户体验增强如何运行

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Maven pom.xml文件中build,plugin标签的使用小结

《Mavenpom.xml文件中build,plugin标签的使用小结》本文主要介绍了Mavenpom.xml文件中build,plugin标签的使用小结,文中通过示例代码介绍的非常详细,对大家的学... 目录<build> 标签Plugins插件<build> 标签<build> 标签是 pom.XML

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi