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

相关文章

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

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

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

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

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

Spring下自定义xml标签

dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子。 一 编写模型类 1 package com.hulk.testdubbo.model;2 3 public class Hero {4 private String name;5 private int

ViewPager+fragment实现切换页面(一)

如今的很多应用中都是下面有一排按钮,点击可以切换页面,滑动也可以切换页面。下面就来简单的实现这个功能。 思路 首先肯定是会用到viewpager这个控件,为了能够向下兼容,最好用v4包下的viewpager,Activity要继承FragmentActivity 其次用一个集合来存储所有的fragment页面在设置viewpager的适配器时,把存储fragment页面的list集合传入ada

Struts2常用标签总结--转载

Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性。实现了更好的代码复用。Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。 Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于

安卓中的fragment与viewPager的使用问题的解决

最近使用viewPager,结合fragment使用,发现fragment的周期将不符合他的原有的周期流程,多个fragment将会产生错位问题。       通过研究相关代码,发现fragment的切换实际调用的函数为setUserVisibleHint,通过在其中重写方法,将会达到fragment正确切换的效果。       public void setUserVisible

LLM应用实战: 产业治理多标签分类

数据介绍 标签体系 产业治理方面的标签体系共计200+个,每个标签共有4个层级,且第3、4层级有标签含义的概括信息。 原始数据 企业官网介绍数据,包括基本介绍、主要产品等 企业专利数据,包括专利名称和专利摘要信息,且专利的数据量大。 LLM选型 经调研,采用Qwen2-72B-Instruct-GPTQ-Int4量化版本,占用显存更少,且效果与非量化相当,

Vue 向标签中传入 this

我曾经问过 chatgpt 这个问题,chatgpt 说不行! 但是,chatgpt 说的就算吗? 来试试吧: https://andi.cn/page/621733.html 当然是可以的!