Android滑动ScrollView时使导航栏停留的效果(仿ios的tableview分区)

Android-仿IOSQQ底部导航栏效果可自定义多种属性效果 仿IOS、QQ底部导航栏效果,可自定义多种属性效果 立即下载


        首先,我们来看下效果图,如下:


 


       让我们来分析一下这个图,这是一个scrollview,有4个条目,当我们向上滑动的时候,如果条目2滑到顶端,会把

条目1顶上去,然后条目2停留,等待条目3上来,之后条目3会把条目2顶上去,然后停留,后面同理。

那么,这个动态的怎么来实现呢?停留的导航栏是什么呢?


        其实,导航栏是一个浮在scrollView上面的一个textView。当条目2滚动到条目1下面的时候,让textview动态的随

着scrollview的滚动而滚动直至条目1滚出屏幕。当条目2滚动到条目1的位置的时候让textView显示在条目1 的位置,

当scrollview继续滚动的时候textview不动,给人一种条目2停留的感觉。以下同理。


        好,大概的原理我们已经大致的清楚了,那就开始来看一下布局吧!


<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.peiwc.iostableview.MyScrollView
        android:id="@+id/scv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/title0"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:background="#ffF19EDB"
                android:gravity="center"
                android:textStyle="bold"
                android:text="条目1" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:adjustViewBounds="true"
                android:gravity="center"
                android:scaleType="fitCenter"
                android:text="text1"
                android:textSize="26sp" />

            <TextView
                android:id="@+id/title1"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:background="@color/colorRed"
                android:gravity="center"
                android:text="条目2"
                android:textStyle="bold"
                android:textSize="22sp"
                android:textColor="@android:color/white"/>


            <TextView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:adjustViewBounds="true"
                android:gravity="center"
                android:scaleType="fitCenter"
                android:text="text2"
                android:textSize="26sp" />

            <TextView
                android:id="@+id/img"
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:adjustViewBounds="true"
                android:gravity="center"
                android:scaleType="fitCenter"
                android:text="text3"
                android:textSize="26sp" />

            <TextView
                android:id="@+id/title2"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:background="@color/colorYel"
                android:gravity="center"
                android:text="条目3"
                android:textSize="22sp"
                android:textColor="@android:color/white"
                android:textStyle="bold"/>


            <TextView
                android:id="@+id/iv1"
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:adjustViewBounds="true"
                android:gravity="center"
                android:scaleType="fitCenter"
                android:text="text4"
                android:textSize="26sp" />

            <TextView
                android:id="@+id/title3"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:background="@color/colorBlue"
                android:gravity="center"
                android:text="条目4"
                android:textSize="22sp"
                android:textColor="@android:color/white"
                android:textStyle="bold"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:adjustViewBounds="true"
                android:gravity="center"
                android:scaleType="fitCenter"
                android:text="text5"
                android:textSize="26sp" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:adjustViewBounds="true"
                android:gravity="center"
                android:scaleType="fitCenter"
                android:text="text6"
                android:textSize="26sp" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:adjustViewBounds="true"
                android:gravity="center"
                android:scaleType="fitCenter"
                android:text="text7"
                android:textSize="26sp" />
        </LinearLayout>
    </com.example.peiwc.iostableview.MyScrollView>
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:background="@color/colorZi"
        android:gravity="center"
        android:textSize="22sp"
        android:textColor="@android:color/white"
        android:textStyle="bold"
        android:text="条目1" />

</RelativeLayout></span></span>

       这个布局整体是个Relativelayout,里面在scrollview上面有一个textview title,我们给4个条目都设置了id,分别是title0,title1,title2,title3.可以看到scrollview被重写了


       为什么要重写scrollview呢?


       因为我们要对scrollview进行监听,获得scrollview滑动的距离,从而控制title的位移。可惜sdk并没哟响应的方法,但是scrollview中倒是提供了一个方法


<pre name="code" class="java"><span style="font-size:18px;">  @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged( x, y, oldx, oldy);
        }
    }</span>



显然这个方法是不能被外界调用的,因此我们要把它暴露出去,方便使用。

         下面帖上程序代码我们来具体看下ScrollView:

<pre name="code" class="java"><span style="font-size:18px;">public class MyScrollView extends ScrollView {
    private ScrollViewListener scrollViewListener = null;


    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    public interface ScrollViewListener {
        void onScrollChanged( int x, int y, int oldx, int oldy);
    }
    public void setScrollViewListener(ScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }
//    onScrollChanged里面有4个参数,l代表滑动后当前ScrollView可视界面的左上角在整个ScrollView的X轴中的位置,oldi也就是滑动前的X轴位置了。
//    同理,t也是当前可视界面的左上角在整个ScrollView的Y轴上的位置,oldt也就是移动前的Y轴位置了。
    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged( x, y, oldx, oldy);
        }
    }

}
</span>




       接下来,就是我们华丽丽的Activity闪亮登场啦!先把整篇帖上去,然后我再仔细讲。

<pre name="code" class="java"><span style="font-size:18px;">public class MainActivity extends Activity implements MyScrollView.ScrollViewListener{
    private TextView title0,title1,title2,title3,title;
    private long topDistance0,topDistance1,topDistance2,topDistance3,height;
    private MyScrollView scrollView;
    private int distance;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        title0=(TextView)findViewById(R.id.title0);
        title1=(TextView)findViewById(R.id.title1);
        title2=(TextView)findViewById(R.id.title2);
        title3=(TextView)findViewById(R.id.title3);
        title=(TextView)findViewById(R.id.title);
        scrollView=(MyScrollView)findViewById(R.id.scv);
        scrollView.setScrollViewListener(this);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if(hasFocus){
            topDistance0 = title0.getTop();
            topDistance1 = title1.getTop();
            topDistance2 = title2.getTop();
            topDistance3 = title3.getTop();//按钮左上角相对于父view(LinerLayout)的y坐标
            height = title.getMeasuredHeight();
            Log.i("","=topDistance0="+topDistance0);
            Log.i("","=topDistance1="+topDistance1);
            Log.i("","=topDistance2="+topDistance2);
            Log.i("","=topDistance3="+topDistance3);
            Log.i("","=topDistance3="+topDistance3);
            Log.i("","=height="+height);
        }
    }
    @Override
    public void onScrollChanged(int x, int y, int oldx, int oldy) {
        Log.i("","=topDistance=distance="+"x="+x+";y="+y+";oldx="+oldx+";oldy"+oldy);
        distance=y;
        distancePlace(topDistance0,topDistance1);
        distancePlaceLayout(topDistance1,topDistance0);
        distancePlace(topDistance1,topDistance2);
        distancePlaceLayout(topDistance2,topDistance1);
        distancePlace(topDistance2,topDistance3);
        distancePlaceLayout(topDistance3,topDistance2);

        if (distance > topDistance3) {
            title.layout(0,0,title.getRight(),(int)height);
            showText(topDistance3);
        }
    }
    private void distancePlaceLayout(long topDistance1,long topDistance0){
        if(distance>topDistance1-height && distance<topDistance1 ){
            title.layout(0,(int)(topDistance1-distance-height),title.getRight(),(int)(topDistance1-distance));
            showText(topDistance0);
        }
    }
    private void distancePlace(long topDistance0,long topDistance1){
        if(distance >= topDistance0&& distance<topDistance1-height){
            title.layout(0,0,title.getRight(),(int)height);
            showText(topDistance0);
        }
    }
    private void showText(long topDistance){
        if(topDistance==topDistance0){
            title.setText("条目1");
            title.setBackground(getResources().getDrawable(R.color.colorZi));
        }
        if(topDistance==topDistance1){
            title.setText("条目2");
            title.setBackground(getResources().getDrawable(R.color.colorRed));
        }
        if(topDistance==topDistance2){
            title.setText("条目3");
            title.setBackground(getResources().getDrawable(R.color.colorYel));
        }
        if(topDistance==topDistance3){
            title.setText("条目4");
            title.setBackground(getResources().getDrawable(R.color.colorBlue));
        }


    }
}</span>



        在onWindowFocusChanged(boolean hasFocus)中,获取了4个条目的getTop值,即条目到scrollview顶端的距离。注意:getTop是控件左上角相对于父布局的y坐标。这个布局中所有条目的父布局都是scrollview,所以我们这里可以直接使用。我们看下打印的结果:

来看下onScrollChange方法:

          当条目2到达条目1低端的时候,滑动的距离就应该是topDistance1-height,即title1.getTop-height,height是条目的高度。那么当条目2还没有到达条目1 低端的时候,如图,我们做了如下的判断:

<pre name="code" class="java"><span style="font-size:18px;">if(distance >= topDistance0 && distance<topDistance1-height){
            title.layout(0,0,title.getRight(),(int)height);
            showText(topDistance0);
        }</span>




          当条目2到达条目1低端和条目1顶端之间的位置,即条目2往上推动条目1的时候

        滑动的距离就应该是topDistance1-height和即topDistance1之间,我们做了如下的判断:

<pre name="code" class="java"><span style="font-size:18px;">if(distance>topDistance1-height && distance<topDistance1 ){
            title.layout(0,(int)(topDistance1-distance-height),title.getRight(),(int)(topDistance1-distance));
            showText(topDistance0);
        }</span>





       此时title是动态的,我们根据滑动的距离实时给title定个位。

        剩下的条目依次类推。

        把这两个判断做下封装,传入不同的距离值就可以啦!

        OK,demo完成!


源码:http://download.youkuaiyun.com/detail/aa_chao/9635014

仿IOS TableView 仿IOS TableView ,支持自定义视图,支持显示消息数目,支持个性化定制UI 立即下载

相关推荐

告别盲调!用Synopsys VIP搭建PCIe 5.0验证环境,手把手搞定链路训练与均衡调试

本文详细介绍了基于Synopsys VIP搭建PCIe 5.0验证环境的实战指南,重点解析了链路训练(LTSSM)与均衡调试的关键技术。通过配置VIP组件、设计验证平台架构及实战调试技巧,帮助工程师高效解决PCIe 5.0验证中的常见问题,提升芯片验证效率与可靠性。

weixin_28700411的博客 459

仿IOS Tableview 实现类似设置界面

相信不少人在做这种设置界面的时候,对于一些常用的item每次都去布局觉得很麻烦,这里是用listview去实现的,能实现较复杂的功能 ,下面是我做项目的时候总结:可以看到第一个item和其他item不一样,所以我们第一个item用自定义view,RichButtonViewItem里面继承RichButtonBaseItem。 public class RichButtonViewItem ext

菜包子的专栏 1083

Keil uVision5 STM32 startup_stm32f10x_md_vl.s error A3906U Malformed via file target not created..

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2779

android自定义View之自定义可置顶ScrollView,View滑动原理简析

使用各种App的时候,发现一个特点,现在的App在可以滑动的页面中,基本上都添加了一个置顶按钮的效果,使的用户可以很方便的回到顶部,就像网页中几乎所有的页面都有置顶效果按钮一样,觉得这个交互不错,以后自己的项目里也肯定会用到的,就抽空把这个小功能实现了一下,现在把实现过程记录下,以方便以后使用。   先看下效果图:     当ScrollView向上滑动超过一定距离后,就渐变的出现一个

qndroid的专栏 2585

【嵌入式Linux驱动开发】二十四、Linux I2C 驱动上手尝试

  人的前程关于眼界、关乎格局。   志之所趋,无远弗届,穷山复海不能限也;   志之所向,无坚不入,锐兵精甲不能御也。 一、I2C驱动框架简介   Linux内核将 I2C 驱动分为两部分: ①、 I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。 ②、 I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。 1....

悟已往之不谏 知来者之可追 1068

【数据集】CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

WW、forever的博客 402

完美解决Android中的ScrollView嵌套ScrollView滑动冲突问题

疫情期间闲在家中实在是无聊,游戏也提不起兴趣,一天天除了吃就是睡,哪儿也去不了,本以为自己挺宅的,没想到疫情让我从新认识了自己,原来自己也是有一颗向往自由的心啊!突然就理解了那些长期被关在家中盼望出去撒泼的狗子是一种怎样的心情了! 罢了罢了,抱着想起电脑中留有不少以前写的Demo,看看能不能捡个出来写(shui)篇博客的想法,于是就产生了这篇文章。 滑动冲突在Android中是一个比较常见...

Ever69的博客 6995

TC3XX - MCAL知识点(十一):WDG EB-tresos配置说明与代码浅析

在AUTOSAR中,看门狗栈实现了三种监控机制:实时监控:用于周期软件的定时监控期限监督:针对非周期软件逻辑监督:用于监督执行顺序的正确性看门狗(WDG)驱动实现AUTOSAR(4.2.2)中规定的看门狗SWS,提供初始化、改变操作模式和设置触发条件(超时)等服务,供看门狗硬件(WDT)用户使用。WDG驱动的用户包括:模式管理模块(用于初始化),WdgM通过Wdglf设置触发条件和驱动运行模式设置。WdgM实施上述监督机制。AUTOSAR扩展触发概念,以支持窗口看门狗模式。

梦想技术家 3603

【Android 动画】随ScrollView滑动头部缩放动画(附demo)

一、为什么需要做这样的动画? 产品提出这样的需求:希望标题栏能够随着scrollView的滑动而进行缩放。 这个动画到底是什么样?现在把gif图传一下。当然,实际上线的页面会比这个好看很多,这只是demo而已,不过动画功能已经全部实现。 二、这个动画的具体实现思路 1、步骤: (1)找到scrollView的scrollListener方法 (2)在回调的方法里可以得到滑动距离...

你关注了我,是个概率极低的事件...... 4610

海康威视嵌入式最全面试题及参考答案(3万字长文)

主营业务:提供包括前端摄像头、后端存储设备、显示控制设备等在内的全方位视频监控解决方案。市场地位:在全球范围内享有较高的市场份额,在安防领域具有较强的竞争力。技术创新:持续投入研发,拥有多项核心技术和专利,特别是在视频处理算法、人工智能等方面取得了显著成果。社会责任:积极参与公共安全项目,为智慧城市、交通管理等领域提供技术支持和服务。国际业务:除了国内市场外,海康威视的产品和服务也销往全球多个国家和地区。面向对象编程。

大模型大数据攻城狮的专栏 1765

MATLAB - Gazebo 联合仿真 —— 使用 UR10 机械臂检测和采摘水果

本示例演示如何在 Gazebo 物理模拟器中设置 Universal Robotics UR10 机械臂和仿真环境。您需要配置一个机器人从树上摘苹果的仿真环境。本示例演示如何利用这些工具箱,使用 Universal Robotics UR10 机械手模拟机器人检测并从树上摘取苹果。Robotics System Toolbox™ - 在 Simulink® 和 Gazebo 中对机械手进行建模、规划和模拟。Navigation Toolbox™ - 生成三维环境的占用图。

机器人控制与仿真应用 4183

Android 实现页面顶部下拉、底部上拉 沿着Y轴缩放效果

1.仅对ScrollView 和RecyclerView 进行顶部下拉,底部上拉实现类似小米页面,页面到达最底部,继续向下拉动时,或者页面到达最底部继续向上拉动时产生的沿着Y轴的缩放效果。 2.原理:以ScaleRecyclerView 为例,创建ScaleRecyclerView 继承至RecyclerView 。 3.重写dispatchTouchEvent()方法。当滑动调用disp

qq_33214392的博客 3741

C#利用最小二乘法拟合任意次函数曲线

给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。因此,我们需要一种新的逼近原函数的手段: ①不要求过所有的点(可以消除误差影响);②尽可能表现数据的趋势,靠近这些点。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 [1],其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达,具体可以查阅相关资料。最小二乘法(又称最小平方法)是一种数学技术。

qq_30725967的博客 3755

标题栏随页面滑动之title移动定位效果——TitleLocate

可能小伙伴们会碰到这种需求, 页面Y轴方向是可滑动的ScrollView或者RecyclerView,ListView,GridView, 标题栏沉浸式,随着页面滑动, 标题栏随着做背景色的渐隐渐现效果,为了不遮挡图片或者沉浸式UI,标题也是随着滑动到某个距离时,才做显现。 今天就为大家带来这样一个示例。其实咱们掌握的最主要的是思路,实现方式或者代码都是次要。理清思路后,再动手会更快。

William的博客 2513

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android中ScrollView和TabLayout配合使用实现滑动定位效果

今天写的是ScrollView和TabLayout联合使用实现滑动定位效果,话不多说,请看效果图: 图中主要实现了两个功能。第一:点击上方的TabLayout标签,页面可以快速滑到对应的位置。第二:当滑动下方的view时,TabLayout会跟随下方显示对应的view,话不多说,请看下面代码: 1.首先看布局文件的代码: <?xml version="1.0" encoding="utf-...

woshi_awei的博客 2005

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android上实现仿IOS的导航栏TitleBar

一个简单易用的导航栏TitleBar,可以轻松实现IOS导航栏的各种效果

一刀三段的专栏 8505

Android-导航栏特效-新闻类APP(仿iOS版网易新闻今日头条的文字渐变缩放特效)

好久没有写文章了,慢慢的自己工作中遇到的问题不做积累,下次遇到还会忘。哎。。。。 最近工作中要实现类似 今日头条等新闻类APP顶部导航条的效果 ,不过我们这效果切换时要加上文字颜色的渐变和缩放。如下:我不会弄动态图片啊,求各位会的教俺下: 一:分析 今天我们要实现这种特效。 用到的开源项目有:master-nineoldandroids-library.jar这个jar包,这个

顾修忠的博客 1万+

android canvas_Android仿IOS11 控制中心进度条

这篇文章我们就用简单的自定义View实现类似iOS11的控制中心里边出现的很新颖的进度条。先看一下目标效果图,以及最后的实现效果:自定义属性分析名字释义progressMax最大值progressValue进度iconSrc图标bgColor背景颜色progressColor进度颜色progressOrientation方向rectRadius圆角弧度iconPaddingicon内间距...

weixin_39873191的博客 383

Android 打造顶部停留控件,可用于所有可滚动的控件(ScrollView,ListView)

1、序言现在很多App为了让一个页面可以有更多展示的东西。于是乎有一个界面就有几个tab进行切换页面,同时滚动的时候为了方便用户切换tab,这时tab需要悬浮在布局的顶部。所以这样就有了这篇blog咯…….2、实现原理控件的实现原理,相对来还是比较简单的: 1、首先自定义一个GroupView,实现滑动的效果,同时进行一些判断,比如:当满足一些条件时,把事件处理交给ChildView来处理;当Ch

熊大巍搬砖记 5024

控件随ScrollView滚动到某位置会停靠的效果

之前因为项目需要做了一个效果,就是当某个操作按钮滑动顶部是固定在顶部,不让其隐藏,让用户无时无刻都可以实现这个操作。 这个效果不是很神奇,就个人来说呢,很有用。无形间增加了用户体验鸟 直接上图吧,效果如下: 效果不错吧,哈哈 一开始 中间深绿色的一条 可以随着整一块拖动。 当它到达顶部的时候,能够靠着状态栏停留。 往下拖动回到原来位置的时候 , 又可以向

huangdroid的专栏---不要让任何事情成为你不去学习的理由! 3808

Android studio页面布局实现固定顶部和底部导航栏,中间可滑动

android 开发实现实现页面上下菜单栏固定 中间设置可上下滑动 android 页面布局固定顶部,底部 ,中间设置可上下滑动

hjjshua的博客 1万+

仿制Iphone UI的UITableView for Android

android-uitableview是一个仿制Iphone UI的view,界面效果不错。 Defining your layout 查看源码打印? 1 br.com.dina.ui.widget.UITableView 2 android:id="@+id/tableView" 3

阿海的博客 4981

android listview 圆角的实现方案,模仿Iphone的UITableView

需求           这几天十一放假,在群里非常活跃,很多朋友问如何实现android中listview的圆角功能,像Iphone设置里面的tableView如 如下效果:                 实现过程 其实这个功能实现也很简单,只是很多朋友没有仔细的去了解android布局的相关知识,这里我们使用了android中的shade的圆角功能来实现的。    java代码很

michael Yang的专栏 3601

【Android】安卓开发实战之自定义仿iPhone导航条组件

首先来看一下效果: 下面来看看实现方式: 1、首先在value文件夹下的colors.xml文件下新建两个颜色 #3F51B5 #303F9F #FF4081 #ff6a69 #FFFFFF 2、然后在drawable文件夹下新建6个资源文件 a、round_red_food.xml 背景颜色填充为红色,左上角和左下角的弧度设为3dp,

Hy的博客 3895
上一篇: Android自定义简易时间选择器
下一篇: Android 动态生成多个控件并实现点击
AA_chao
博客等级 码龄10年 9粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值