自定义控件实现-今日头条图集效果

bylijian bylijian     2022-10-04     526

关键词:

前提

产品有个新需求,类似今日头条的图集效果
大致看了下UI,大致就是ViewPager,横向滑动切换图片,纵向滑动移动图片,纵向超过一定距离,图片飞出,图集淡出动画退出,支持图片的双击放大。

思路

第一个问题就是图集详情页用什么实现?Activity?Fragment?还是一个复杂的View?
我最初打算用Fragment的,因为觉得效率高,Fragment需要自己处理进入退出,
今日头条使用了Activity,因为这个Activity可以显示前一个Activity,所以它一定是一个透明的Activity
这个用自定义的Activity主题就可以实现

用Android的Layout Inspector 工具查看今日头条它的布局,使用到ViewPager
我也打算继承ViewPager,然后处理不同的情况下的触摸事件,实现需求

具体实现

1 定义一个透明的Activity:

AndroidManifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lijian.FloatImage">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name="com.lijian.FloatImage.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.lijian.FloatImage.ImagesActivity"
            android:theme="@style/ImagesAppDayTheme">

        </activity>
    </application>

</manifest>

可以看到,图集详情页使用了ImagesActivity
它对应的主题是ImagesAppDayTheme,注意里面的几个关键参数,目的就是创建背景透明的Activity:

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="ImagesAppDayTheme" parent="AppTheme">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation</item>
    </style>

2 继承ViewPager的FloatViewPager

普通的ViewPager不能满足我们的需要,因为它只支持横向滑动切换。我们需要处理其他方向的触摸事件,然后处理。

这里我直接重写了ViewPager的public boolean dispatchTouchEvent(MotionEvent ev) { }方法,
为什么呢?因为这里是ViewPager触摸事件分发的起点,比起使用onTouchEvent方法更灵活,方便。

我们知道一个完整的触摸操作一般
由 ActionDown-》多个ActionMove-》ActionUp组成
我们需要判断这个触摸操作到底是横向的还是纵向的,
如果是横向的,直接调用父类ViewPager
return super.dispatchTouchEvent(ev);,由它处理横向切换即可

对于纵向的触摸:
我们需要计算触摸的 X,Y的距离,然后移动ViewPager,实现跟随手指的效果

如果手指抬起来,判断移动距离,距离大于一个比例,就ViewPager整体移动飞出,图集关闭

具体的实现,代码都有注释,如果你需要参考,清楚上述的思路,自己看代码,修改,符合自己需求是最快的。授人鱼不如授人渔

Github地址

https://github.com/bylijian/FloatImages

02今日头条-采集和下载关键词“新垣结衣”的图集图片

...静觅丨崔庆才的个人博客项目地址:copywang/spiders_collection实现功能: 使用requests库爬取得到首页信息,返回的HTML代码中不包含需要的信息,都是些JS在XHR中找到JSON请求和数据使用request.get方法请求JSON数据,使用urlencode()生成... 查看详情

怎么在今日头条上发布新闻,或者做广告投放的?

怎么在今日头条上发布新闻,或者做广告投放的?就是把信息,主动推送给用户的那种广告,或者新闻。广告投放自己不好做,要说自己在上边发新闻或许还可以今日头条如何发布文章?第一步,登陆今日头条官网申请账号第二... 查看详情

如何区分今日头条与今日头条极

...个人中心入口位置一个左一个在右;普通版导航栏目可自定义,极速版则不支持;底部四大功能不一样,普通版是首页、西瓜视频、微头条、小视频,而极速版则微头条换成了任务,且位置右移一位。 查看详情

php+phantomjs实现今日头条的首页推送抓取

 第一次搞爬虫,经验不足,爬出来的效果也不是很好,记录一下吧。 认识的哥们最近在爬今日头条的数据,不过他是做java的。之前也想用php做点爬数据的东西,于是直接也搞今日头条,万一有不明白的地方还能有个人... 查看详情

android仿今日头条频道管理(下)(gridview之间item的移动和拖拽)

...的事件分发机制。网上这方面的资料也比較多。由于自己定义控件大部分要用到事件分发机制的知识。实现思路要实现I 查看详情

织梦图集图片在首页列表页调用并且自定义输出几张(代码片段)

不改动官方核心文件,在自定义方法文件里加入个方法来实现织梦图集图片在首页列表页调用并且自定义输出几张效果展示教程实现打开includeextend.func.php在最下面加入这个方法functionGetimgurls($aid,$num=4)global$dsql;$imgurls=$result=‘‘;$... 查看详情

android面试题

Android程序员面试宝典自定义控件一分钟实现贴纸功能一分钟实现TextView高亮一分钟实现新手引导页一分钟实现ViewPager卡片一分钟实现加载对话框一分钟实现轮播图一分钟实现GridView拖拽一分钟实现底部导航栏一分钟实现底部Fragmen... 查看详情

自定义控件eatloading自定义控件实现

效果:实现步骤:代码对应:canvas.translate(mEatRadius,height/2);//将画布移动到左侧中间//1、根据progress计算圆心的位置floatx=currentProgress*(width-3*mEatRadius/2)/100;//2、计算两条线的夹角intlineState=currentProgr 查看详情

仿今日头条按钮loading效果

效果代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"conten 查看详情

unity自定义atlas图集实现加载图集中的小图

Unity没有提供加载图集里面小图的API,下面是我学习框架课程(因为这个框架课程没有封装LoadAllAsset的方法)所学到的加载方法。1.封装UIAtlas类,保存序列化的图集 /******************* * Title:CW_FrameWark * Author:CW *&... 查看详情

微信小程序-今日头条案例

...支持上下拉加载更多效果图: 启动欢迎页,几行代码可实现旋转与缩放://flash.jsonReady: 查看详情

新闻网站电脑版带手机版源码,仿东方头条,今日头条,搜狐自媒体网站帝国cms定制

专业定制新闻网站,仿东方头条,今日头条,搜狐自媒体网站源码开发,支持二级域名显示,新闻资讯聚合的头条新闻资讯,内容包括今日头条、头条新闻、社会热点、国内国际快讯、军事、明星、八卦、娱乐、时尚、体育等各... 查看详情

自定义view(代码片段)

自定义View的方式:现有的自定义View的方式有三种:①继承控件的方式——继承一个现有控件,去实现一个简单的效果;②继承View布局的方式——继承多个现有控件,然后干脆继承整个布局,去实现一个复杂的效果... 查看详情

emwin6.x按钮button控件自定义回调函数,实现各种按钮效果(代码片段)

...断更新中:链接第55章      emWin6.x按钮Button控件自定义回调函数,实现各种按钮效果本章节为大家讲解按钮控件自定义回调函数,通过其回调函数就可以实现各种按钮效果。这方面的问题也是经常有初学者问,... 查看详情

wpf效果第二百零五篇之自定义导航控件

前面摸索了一下会简单玩耍自定义控件了;今天再次分享一下N年前想要在GIS实现的一个导航控件;来看看最终实现的效果:1、先来看看前台xaml布局:2、后台路由事件就参照上一篇快捷方式3、关键依赖属性的回调触发路由事件:4、内... 查看详情

wpf自定义控件与样式(11)-等待/忙/正在加载状态-控件实现

一.前言  申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接。  本文主要有三种实现方式... 查看详情

dedecms织梦图集在首页列表页调用并且自定义输出几张

效果 不改动官方核心文件,在自定义方法文件里加入个方法来实现打开includeextend.func.php在最下面加入这个方法functionGetimgurls($aid,$num=4)   {   global$dsql;   $imgurls=$result=‘‘;   查看详情

今日头条面试——ios开发岗

目录一面二面三面一面1、自我介绍2、项目相关3、怎么自定义导航跳转4、谈谈runtime的理解5、KVC的用途6、使用methodswizzling要注意什么?(进行版本迭代的时候需要进行一些检验,防止系统库的函数发生了变化)7、谈对引用计数... 查看详情