进来看看是不是你想要的效果,Android吸顶效果,并有着ViewPager左右切换(1)

最后

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。

不断奔跑,你就知道学习的意义所在!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

dy: Int,

consumed: IntArray,

type: Int

) {

if (dy > 0 && scrollY < maxScrollY) {

scrollBy(0, dy)

consumed[1] = dy

}

}

}

布局文件

我按照美团的布局大体写出这样的布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:app=“http://schemas.android.com/apk/res-auto”

xmlns:tools=“http://schemas.android.com/tools”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”

tools:context=“.MainActivity”>

<LinearLayout

android:id=“@+id/titleBar”

android:layout_width=“match_parent”

android:layout_height=“45dp”

android:gravity=“center_vertical”

android:orientation=“horizontal”

android:paddingLeft=“18dp”

android:paddingRight=“18dp”>

<EditText

android:layout_width=“0dp”

android:layout_height=“35dp”

android:layout_marginEnd=“12dp”

android:layout_marginRight=“12dp”

android:layout_weight=“1”

android:background=“@drawable/edit_style”

android:paddingLeft=“12dp”

android:paddingRight=“12dp” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“35dp”

android:background=“@drawable/button_style”

android:gravity=“center”

android:paddingLeft=“15dp”

android:paddingRight=“15dp”

android:text=“搜索”

android:textColor=“#333333”

android:textStyle=“bold” />

<com.cyn.mt.CoordinatorScrollview

android:id=“@+id/coordinatorScrollView”

android:layout_width=“match_parent”

android:layout_height=“match_parent”>

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“vertical”>

<LinearLayout

android:id=“@+id/titleLinerLayout”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“vertical” />

<com.google.android.material.tabs.TabLayout

android:id=“@+id/tabLayout”

android:layout_width=“match_parent”

android:layout_height=“wrap_content” />

<androidx.viewpager.widget.ViewPager

android:id=“@+id/viewPager”

android:layout_width=“match_parent”

android:layout_height=“wrap_content” />

</com.cyn.mt.CoordinatorScrollview>


Fragment

加入,在Fragment中放入RecyclerView,提供给ViewPager使用,这里代码就不贴了,可以直接下源码!源码在文章末尾!


主要代码(重点来了)

coordinatorScrollView最大滑动距离即是titleLinerLayout的高度,所以实现titleLinerLayout的post方法,来监听titleLinerLayout的高度,由于这一块布局常常是通过网络请求后加载,所以,网络请求完毕后要再次实现post设置coordinatorScrollView最大滑动距离,如第80行代码和第90行代码,在这里,我并不推荐使用多次回调监听的方法!使用post只用调用一次,如果使用多次监听View变化的方法,应该在最后一次网络请求完毕后将此监听事件remove掉!

package com.cyn.mt

import android.content.res.Resources

import android.os.Bundle

import android.os.Handler

import android.util.DisplayMetrics

import android.view.LayoutInflater.from

import android.view.View

import androidx.appcompat.app.AppCompatActivity

import androidx.fragment.app.Fragment

import kotlinx.android.synthetic.main.activity_main.*

import kotlinx.android.synthetic.main.title_layout.view.*

class MainActivity : AppCompatActivity() {

//屏幕宽

var screenWidth = 0

//屏幕高

var screenHeight = 0

//tabLayout的文本和图片

private val tabTextData = arrayOf(“常用药品”, “夜间送药”, “隐形眼镜”, “成人用品”, “医疗器械”, “全部商家”)

private val tabIconData = arrayOf(

R.mipmap.tab_icon,

R.mipmap.tab_icon,

R.mipmap.tab_icon,

R.mipmap.tab_icon,

R.mipmap.tab_icon,

R.mipmap.tab_icon

)

private var fragmentData = mutableListOf()

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

initView()

initData()

}

private fun initView() {

//获取屏幕宽高

val resources: Resources = this.resources

val dm: DisplayMetrics = resources.displayMetrics

screenWidth = dm.widthPixels

screenHeight = dm.heightPixels

//状态栏沉浸

StatusBarUtil.immersive(this)

//titleBar填充

StatusBarUtil.setPaddingSmart(this, titleBar)

//状态栏字体颜色设置为黑色

StatusBarUtil.darkMode(this)

//动态设置ViewPager高度

coordinatorScrollView.post {

val layoutParams = viewPager.layoutParams

layoutParams.width = screenWidth

layoutParams.height = coordinatorScrollView.height - tabLayout.height

viewPager.layoutParams = layoutParams

}

}

private fun initData() {

//我模拟在头部动态添加三个布局,就用图片代替了,要设置的图片高度都是我提前算好的,根据屏幕的比例来计算的

val titleView1 = getTitleView(screenWidth * 0.42F, R.mipmap.title1)

val titleView2 = getTitleView(screenWidth * 0.262F, R.mipmap.title2)

titleLinerLayout.addView(titleView1)

titleLinerLayout.addView(titleView2)

//设置最大滑动距离

titleLinerLayout.post {

coordinatorScrollView.setMaxScrollY(titleLinerLayout.height)

}

//用于请求网络后动态添加子布局

Handler().postDelayed({

val titleView3 = getTitleView(screenWidth * 0.589F, R.mipmap.title3)

titleLinerLayout.addView(titleView3)

//再次设置最大滑动距离

titleLinerLayout.post {

coordinatorScrollView.setMaxScrollY(titleLinerLayout.height)

}

}, 200)

//添加TabLayout

for (i in tabTextData.indices) {

tabLayout.addTab(tabLayout.newTab())

tabLayout.getTabAt(i)!!.setText(tabTextData[i]).setIcon(tabIconData[i])

//添加Fragment

fragmentData.add(TestFragment.newInstance(tabTextData[i]))

}

最后

感觉现在好多人都在说什么安卓快凉了,工作越来越难找了。又是说什么程序员中年危机啥的,为啥我这年近30的老农根本没有这种感觉,反倒觉得那些贩卖焦虑的都是瞎j8扯谈。当然,职业危机意识确实是要有的,但根本没到那种草木皆兵的地步好吗?

Android凉了都是弱者的借口和说辞。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

所以,最后这里放上我耗时两个月,将自己8年Android开发的知识笔记整理成的Android开发者必知必会系统学习资料笔记,上述知识点在笔记中都有详细的解读,里面还包含了腾讯、字节跳动、阿里、百度2019-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。

以上全套学习笔记面试宝典,吃透一半保你可以吊打面试官,只有自己真正强大了,有核心竞争力,你才有拒绝offer的权力,所以,奋斗吧!骚年们!千里之行,始于足下。种下一颗树最好的时间是十年前,其次,就是现在。

最后,赠与大家一句诗,共勉!

不驰于空想,不骛于虚声。不忘初心,方得始终。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

点整理成了视频和PDF(知识脉络 + 诸多细节)。

[外链图片转存中…(img-gnSD1eRg-1715474484971)]

以上全套学习笔记面试宝典,吃透一半保你可以吊打面试官,只有自己真正强大了,有核心竞争力,你才有拒绝offer的权力,所以,奋斗吧!骚年们!千里之行,始于足下。种下一颗树最好的时间是十年前,其次,就是现在。

最后,赠与大家一句诗,共勉!

不驰于空想,不骛于虚声。不忘初心,方得始终。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值