我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android中协调滚动布局的实现代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android中协调滚动布局的实现代码

使用 AppbarLayout 和 MotionLayout 实现常用的布局效果

前文我们讲了协调滚动的一些定义方式,我们在开发中常用的几种效果都可用 AppbarLayout 或 MotionLayout 来实现。

这里先上效果图

可能大家都比较会AppbarLayout这种实现方式,这里就直接上代码和效果图了。

一、AppbarLayout + ViewPager

核心代码都在 CoordinatorLayout 闭包中

        <androidx.coordinatorlayout.widget.CoordinatorLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <com.google.android.material.appbar.AppBarLayout
                    android:id="@+id/app_bar_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/white"
                    android:orientation="vertical"
                    app:elevation="0dp">
                    <!--   顶部的图片    -->
                    <androidx.constraintlayout.widget.ConstraintLayout
                        android:id="@+id/cl_img_box"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:layout_scrollFlags="scroll|snap">
                        <ImageView
                            android:id="@+id/image_view_photo_cover"
                            android:layout_width="0dp"
                            android:layout_height="0dp"
                            android:contentDescription="@string/part_time_jobs"
                            android:scaleType="centerCrop"
                            app:layout_constraintDimensionRatio="W,94:129"
                            app:layout_constraintLeft_toLeftOf="parent"
                            app:layout_constraintRight_toRightOf="parent"
                            app:layout_constraintTop_toTopOf="parent" />
                        <ProgressBar
                            android:id="@+id/progress_bar_job_detail"
                            android:layout_width="25dp"
                            android:layout_height="25dp"
                            android:layout_gravity="center"
                            android:indeterminate="true"
                            android:indeterminateTint="@color/colorAccent"
                            android:indeterminateTintMode="class="lazy" data-src_atop"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintLeft_toLeftOf="parent"
                            app:layout_constraintRight_toRightOf="parent"
                            app:layout_constraintTop_toTopOf="parent" />
                        <com.youth.banner.Banner
                            android:id="@+id/banner_employer_imgs"
                            android:layout_width="match_parent"
                            android:layout_height="0dp"
                            android:background="@drawable/iv_promotion_merchant_detail_placehold_bg"
                            app:banner_auto_loop="false"
                            app:banner_indicator_height="@dimen/d_5dp"
                            app:banner_indicator_marginBottom="@dimen/d_15dp"
                            app:banner_indicator_normal_color="#66ffffff"
                            app:banner_indicator_normal_width="@dimen/d_4dp"
                            app:banner_indicator_selected_color="#ffffff"
                            app:banner_indicator_selected_width="@dimen/d_6dp"
                            app:banner_indicator_space="@dimen/d_4dp"
                            app:banner_infinite_loop="true"
                            app:layout_constraintDimensionRatio="W,94:129"
                            app:layout_constraintLeft_toLeftOf="parent"
                            app:layout_constraintRight_toRightOf="parent"
                            app:layout_constraintTop_toTopOf="parent" />
                        <LinearLayout
                            android:id="@+id/ll_gallery_box"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginRight="@dimen/d_15dp"
                            android:layout_marginBottom="@dimen/d_10dp"
                            android:background="@drawable/shape_job_detail_gallery_box"
                            android:gravity="center"
                            android:orientation="horizontal"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintRight_toRightOf="parent">
                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:drawableLeft="@drawable/job_detail_gallery_icon"
                                android:drawablePadding="@dimen/d_7dp"
                                android:paddingLeft="@dimen/d_10dp"
                                android:paddingTop="@dimen/d_6dp"
                                android:paddingRight="@dimen/d_10dp"
                                android:paddingBottom="@dimen/d_6dp"
                                android:text="@string/gallery"
                                android:textColor="@color/white"
                                android:textSize="@dimen/d_14sp" />
                        </LinearLayout>
                    </androidx.constraintlayout.widget.ConstraintLayout>
                    <!--   Tab布局         -->
                    <FrameLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">
                        <com.google.android.material.tabs.TabLayout
                            android:id="@+id/tabLayout"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:background="@color/white"
                            app:tabIndicator="@drawable/shape_blue_bottom_line_3conner"
                            app:tabIndicatorColor="@color/app_blue"
                            app:tabIndicatorFullWidth="false"
                            app:tabIndicatorHeight="@dimen/d_2dp"
                            app:tabMode="scrollable"
                            app:tabRippleColor="@color/transparent"
                            app:tabSelectedTextColor="@color/app_blue"
                            app:tabTextColor="@color/black" />
                        <ImageView
                            android:id="@+id/iv_tab_right"
                            android:layout_width="wrap_content"
                            android:layout_height="match_parent"
                            android:layout_gravity="right"
                            android:class="lazy" data-src="@drawable/job_detail_tab_right_arrow" />
                    </FrameLayout>
                    <View
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/d_6dp"
                        android:background="@color/page_background" />
                </com.google.android.material.appbar.AppBarLayout>
                <androidx.viewpager.widget.ViewPager
                    android:id="@+id/view_pager"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
            </androidx.coordinatorlayout.widget.CoordinatorLayout>

很平常的效果了,也是用的比较多的效果,定义起来非常简单,在AppbarLayout下面包裹2个View,图片View跟随滚动,而TabBarLayout则吸顶。

效果如下:

二、AppbarLayout + RecyclerView

和上面一样的效果,这里我们可以指定下拉的时候把隐藏的布局显示出来,设置一个核心属性

app:layout_scrollFlags="scroll|snap|enterAlways

定义的布局如下:

        <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <!--    顶部的筛选     -->
            <com.google.android.material.appbar.AppBarLayout
                android:id="@+id/app_bar_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/white">
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/white"
                    android:orientation="vertical"
                    app:layout_scrollFlags="scroll|snap|enterAlways">
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="@dimen/d_12dp"
                        android:layout_marginTop="@dimen/d_12dp"
                        android:layout_marginRight="@dimen/d_12dp"
                        android:gravity="center_vertical"
                        android:orientation="horizontal">
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="兼职推荐"
                            android:textColor="@color/black_33"
                            android:textSize="@{viewModel.mSortTypeLD == 1?@dimen/d_17sp:@dimen/d_15sp}"
                            binding:clicks="@{click.switchReCommend}"
                            binding:typefaceMediumOrBold="@{viewModel.mSortTypeLD == 1}"
                            tools:textSize="@dimen/d_17sp" />
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="@dimen/d_15dp"
                            android:text="最新"
                            android:textColor="@color/black_33"
                            android:textSize="@{viewModel.mSortTypeLD == 2?@dimen/d_17sp:@dimen/d_15sp}"
                            binding:clicks="@{click.switchlatested}"
                            binding:typefaceMediumOrBold="@{viewModel.mSortTypeLD == 2}" />
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="@dimen/d_15dp"
                            android:text="附近"
                            android:textColor="@color/black_33"
                            android:textSize="@{viewModel.mSortTypeLD == 3?@dimen/d_17sp:@dimen/d_15sp}"
                            binding:clicks="@{click.switchNearby}"
                            binding:typefaceMediumOrBold="@{viewModel.mSortTypeLD == 3}" />
                    </LinearLayout>
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/d_8dp"
                        android:orientation="horizontal"
                        android:paddingLeft="@dimen/d_15dp"
                        android:paddingRight="@dimen/d_15dp">
                        <TextView
                            android:layout_width="0dp"
                            android:layout_height="@dimen/d_27dp"
                            android:layout_weight="1"
                            android:background="@{viewModel.MPopupPositionTypeLD==1?@drawable/shape_blue_round2_border:@drawable/shape_white_gray_round2}"
                            android:drawableRight="@{viewModel.MPopupPositionTypeLD==1?@drawable/ic_drop_up_blue:@drawable/ic_drop_down_gray}"
                            android:gravity="center"
                            android:paddingLeft="@dimen/d_8dp"
                            android:paddingRight="@dimen/d_8dp"
                            android:text="全武汉"
                            android:textColor="@{viewModel.MPopupPositionTypeLD==1?@color/app_blue:@color/gray_66}"
                            android:textSize="@dimen/d_12sp"
                            binding:clicks="@{click.searchByLocationPopup}"
                            tools:drawableRight="@drawable/ic_drop_down_gray" />
                        <TextView
                            android:layout_width="0dp"
                            android:layout_height="@dimen/d_27dp"
                            android:layout_marginLeft="@dimen/d_5dp"
                            android:layout_weight="1"
                            android:background="@{viewModel.MPopupPositionTypeLD==2?@drawable/shape_blue_round2_border:@drawable/shape_white_gray_round2}"
                            android:drawableRight="@{viewModel.MPopupPositionTypeLD==2?@drawable/ic_drop_up_blue:@drawable/ic_drop_down_gray}"
                            android:gravity="center"
                            android:paddingLeft="@dimen/d_8dp"
                            android:paddingRight="@dimen/d_8dp"
                            android:text="职位类型"
                            android:textColor="@{viewModel.MPopupPositionTypeLD==2?@color/app_blue:@color/gray_66}"
                            android:textSize="@dimen/d_12sp"
                            binding:clicks="@{click.searchByPositionPopup}"
                            tools:drawableRight="@drawable/ic_drop_down_gray" />
                        <TextView
                            android:layout_width="0dp"
                            android:layout_height="@dimen/d_27dp"
                            android:layout_marginLeft="@dimen/d_5dp"
                            android:layout_weight="1"
                            android:background="@{viewModel.MPopupPositionTypeLD==3?@drawable/shape_blue_round2_border:@drawable/shape_white_gray_round2}"
                            android:drawableRight="@{viewModel.MPopupPositionTypeLD==3?@drawable/ic_drop_up_blue:@drawable/ic_drop_down_gray}"
                            android:gravity="center"
                            android:paddingLeft="@dimen/d_8dp"
                            android:paddingRight="@dimen/d_8dp"
                            android:text="日期"
                            android:textColor="@{viewModel.MPopupPositionTypeLD==3?@color/app_blue:@color/gray_66}"
                            android:textSize="@dimen/d_12sp"
                            binding:clicks="@{click.searchByDatePopup}"
                            tools:drawableRight="@drawable/ic_drop_down_gray" />
                        <TextView
                            android:layout_width="0dp"
                            android:layout_height="@dimen/d_27dp"
                            android:layout_marginLeft="@dimen/d_5dp"
                            android:layout_weight="1"
                            android:background="@{viewModel.MPopupPositionTypeLD==4?@drawable/shape_blue_round2_border:@drawable/shape_white_gray_round2}"
                            android:drawableRight="@{viewModel.MPopupPositionTypeLD==4?@drawable/ic_drop_up_blue:@drawable/ic_drop_down_gray}"
                            android:gravity="center"
                            android:paddingLeft="@dimen/d_8dp"
                            android:paddingRight="@dimen/d_8dp"
                            android:text="筛选"
                            android:textColor="@{viewModel.MPopupPositionTypeLD==4?@color/app_blue:@color/gray_66}"
                            android:textSize="@dimen/d_12sp"
                            binding:clicks="@{click.searchByFilterPopup}"
                            tools:drawableRight="@drawable/ic_drop_down_gray" />
                    </LinearLayout>
                    <View
                        android:id="@+id/view_popup_divider"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/d_1dp"
                        android:layout_marginTop="@dimen/d_10dp"
                        android:background="@color/main_divider" />
                </LinearLayout>
            </com.google.android.material.appbar.AppBarLayout>
            <!--   刷新+列表   -->
            <com.scwang.smart.refresh.layout.SmartRefreshLayout
                android:id="@+id/refresh_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:focusable="true"
                android:focusableInTouchMode="true"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"
                app:srlEnablePreviewInEditMode="true"
                app:srlPrimaryColor="@color/white"
                tools:visibility="gone">
                <com.scwang.smart.refresh.header.ClassicsHeader
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/recycler_view"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:overScrollMode="never"
                    android:scrollbars="vertical">
                </androidx.recyclerview.widget.RecyclerView>
            </com.scwang.smart.refresh.layout.SmartRefreshLayout>
        </androidx.coordinatorlayout.widget.CoordinatorLayout>

效果如下:

三、MotionLayout

MotionLayout的定义主要看xml中控件的start end 的位置与状态。

页面xml:

  <androidx.constraintlayout.motion.widget.MotionLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            app:layoutDescription="@xml/scene_part_job_detail">
            <!--   顶部的图片    -->
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/cl_top_img_box"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <ImageView
                    android:id="@+id/iv_job_image"
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:background="@color/gray"
                    android:scaleType="centerCrop"
                    app:layout_constraintDimensionRatio="W,219:375"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />
            </androidx.constraintlayout.widget.ConstraintLayout>
            <!-- 相册布局 -->
            <LinearLayout
                android:id="@+id/ll_gallery_box"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="@dimen/d_15dp"
                android:layout_marginBottom="@dimen/d_10dp"
                android:background="@drawable/shape_job_detail_gallery_box"
                android:gravity="center"
                android:orientation="horizontal"
                app:layout_constraintBottom_toBottomOf="@id/cl_top_img_box"
                app:layout_constraintRight_toRightOf="@id/cl_top_img_box"
                binding:clicks="@{click.gotoGalleryPage}">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/job_detail_gallery_icon"
                    android:drawablePadding="@dimen/d_7dp"
                    android:paddingLeft="@dimen/d_10dp"
                    android:paddingTop="@dimen/d_6dp"
                    android:paddingRight="@dimen/d_10dp"
                    android:paddingBottom="@dimen/d_6dp"
                    android:text="相册"
                    android:textColor="@color/white"
                    android:textSize="@dimen/d_14sp" />
            </LinearLayout>
            <!--   固定的状态栏 用于定位     -->
            <com.guadou.lib_baselib.view.titlebar.StatusbarGrayView
                android:id="@+id/status_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <!--   返回栏    -->
            <FrameLayout
                android:id="@+id/back_layout"
                android:layout_width="match_parent"
                android:layout_height="@dimen/d_40dp"
                android:background="@color/transparent"
                tools:layout_editor_absoluteY="24dp">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="@dimen/d_14dp"
                    android:layout_marginTop="@dimen/d_2dp"
                    android:class="lazy" data-src="@mipmap/back_white_icon" />
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical|right"
                    android:layout_marginRight="@dimen/d_15dp"
                    android:class="lazy" data-src="@drawable/part_detail_job_collect_icon" />
            </FrameLayout>
            <!--  工作信息等TextView    -->
            <TextView
                android:id="@+id/tv_job_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/d_15dp"
                android:layout_marginTop="@dimen/d_5dp"
                android:ellipsize="end"
                android:gravity="center"
                android:lines="1"
                android:singleLine="true"
                android:text="斗鱼主播招聘"
                android:textColor="@color/white"
                android:textSize="@dimen/d_20sp"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@id/back_layout" />
            <TextView
                android:id="@+id/tv_job_employer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/d_15dp"
                android:layout_marginTop="@dimen/d_10dp"
                android:text="武汉斗鱼网络科技有限公司"
                android:textColor="@color/white"
                android:textSize="@dimen/d_14sp"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@id/tv_job_title" />
            <TextView
                android:id="@+id/tv_job_hour"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/d_15dp"
                android:layout_marginTop="@dimen/d_10dp"
                android:text="100元/小时"
                android:textColor="@color/text_orange"
                android:textSize="@dimen/d_16sp"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@id/tv_job_employer" />
            <TextView
                android:id="@+id/tv_job_industry"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/d_15dp"
                android:layout_marginTop="@dimen/d_8dp"
                android:text="江岸 | 主播"
                android:textColor="@color/white"
                android:textSize="@dimen/d_14sp"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@id/tv_job_hour" />
            <!--   Tab布局     -->
            <FrameLayout
                android:id="@+id/tab_layout_box"
                android:layout_width="match_parent"
                android:layout_height="@dimen/d_40dp">
                <com.google.android.material.tabs.TabLayout
                    android:id="@+id/tabLayout"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/d_40dp"
                    android:background="@color/white"
                    app:tabIndicator="@drawable/shape_blue_bottom_line_3conner"
                    app:tabIndicatorColor="@color/app_blue"
                    app:tabIndicatorFullWidth="false"
                    app:tabIndicatorHeight="@dimen/d_2dp"
                    app:tabMode="scrollable"
                    app:tabRippleColor="@color/transparent"
                    app:tabSelectedTextColor="@color/app_blue"
                    app:tabTextColor="@color/black" />
                <ImageView
                    android:id="@+id/iv_tab_right"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="right"
                    android:class="lazy" data-src="@drawable/job_detail_tab_right_arrow"
                    binding:clicks="@{click.tabNext}" />
            </FrameLayout>
            <!--   Fragment容器     -->
            <androidx.viewpager.widget.ViewPager
                android:id="@+id/view_pager"
                android:layout_width="match_parent"
                android:layout_height="0dp" />
        </androidx.constraintlayout.motion.widget.MotionLayout>

定义场景xml : 控件多的话,定义的东西也会比较多

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">
    <Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@+id/start"
        motion:duration="350">
        <OnClick
            motion:clickAction="toggle"
            motion:targetId="@id/cl_top_img_box" />
        <OnSwipe
            motion:dragDirection="dragUp"
            motion:touchAnchorId="@id/view_pager" />
    </Transition>
    <ConstraintSet android:id="@+id/start">
        <Constraint
            android:id="@id/cl_top_img_box"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/ll_gallery_box"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="@dimen/d_15dp"
            android:layout_marginBottom="@dimen/d_10dp"
            android:alpha="1"
            motion:layout_constraintBottom_toBottomOf="@id/cl_top_img_box"
            motion:layout_constraintRight_toRightOf="@id/cl_top_img_box" />
        <Constraint
            android:id="@id/status_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alpha="0"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/back_layout"
            android:layout_width="match_parent"
            android:layout_height="@dimen/d_40dp"
            motion:layout_constraintTop_toBottomOf="@id/status_view" />
        <Constraint
            android:id="@id/tv_job_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="@dimen/d_5dp"
            android:layout_marginRight="@dimen/d_15dp"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/back_layout">
            <CustomAttribute
                motion:attributeName="textSize"
                motion:customFloatValue="20" />
        </Constraint>
        <Constraint
            android:id="@id/tv_job_employer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="@dimen/d_10dp"
            android:alpha="1"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/tv_job_title" />
        <Constraint
            android:id="@id/tv_job_hour"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="@dimen/d_10dp"
            android:alpha="1"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/tv_job_employer" />
        <Constraint
            android:id="@id/tv_job_industry"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="@dimen/d_8dp"
            android:alpha="1"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/tv_job_hour" />
        <Constraint
            android:id="@id/tab_layout_box"
            android:layout_width="match_parent"
            android:layout_height="@dimen/d_40dp"
            motion:layout_constraintTop_toBottomOf="@id/cl_top_img_box" />
        <Constraint
            android:id="@id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/tab_layout_box" />
    </ConstraintSet>
    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@id/cl_top_img_box"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            motion:layout_constraintBottom_toBottomOf="@id/back_layout"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/ll_gallery_box"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="@dimen/d_15dp"
            android:layout_marginBottom="@dimen/d_10dp"
            android:alpha="0"
            motion:layout_constraintBottom_toBottomOf="@id/cl_top_img_box"
            motion:layout_constraintRight_toRightOf="@id/cl_top_img_box" />
        <Constraint
            android:id="@id/status_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alpha="0"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/back_layout"
            android:layout_width="match_parent"
            android:layout_height="@dimen/d_40dp"
            motion:layout_constraintTop_toBottomOf="@id/status_view" />
        <Constraint
            android:id="@id/tv_job_title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/d_50dp"
            android:layout_marginTop="0dp"
            android:layout_marginRight="@dimen/d_50dp"
            motion:layout_constraintBottom_toBottomOf="@id/back_layout"
            motion:layout_constraintLeft_toLeftOf="@id/back_layout"
            motion:layout_constraintRight_toRightOf="@id/back_layout"
            motion:layout_constraintTop_toTopOf="@id/back_layout">
            <CustomAttribute
                motion:attributeName="textSize"
                motion:customFloatValue="20" />
        </Constraint>
        <Constraint
            android:id="@id/tv_job_employer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="@dimen/d_11dp"
            android:alpha="0"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/back_layout" />
        <Constraint
            android:id="@id/tv_job_hour"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="@dimen/d_11dp"
            android:alpha="0"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/tv_job_employer" />
        <Constraint
            android:id="@id/tv_job_industry"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="@dimen/d_8dp"
            android:alpha="0"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/tv_job_hour" />
        <Constraint
            android:id="@id/tab_layout_box"
            android:layout_width="match_parent"
            android:layout_height="@dimen/d_40dp"
            motion:layout_constraintTop_toBottomOf="@id/back_layout" />
        <Constraint
            android:id="@id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/tab_layout_box" />
    </ConstraintSet>
</MotionScene>

效果:

同样的效果我们可以用 MotionLayout 实现一些 Behavior 的效果:

   <androidx.constraintlayout.motion.widget.MotionLayout
        android:id="@+id/motion_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/page_bg"
        app:layoutDescription="@xml/scene_profile_page">
        <!--   状态栏   -->
        <com.guadou.lib_baselib.view.titlebar.StatusbarGrayView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <!--  Profile顶部    -->
        <ImageView
            android:id="@+id/iv_top_bg"
            android:layout_width="0dp"
            android:layout_height="245dp"
            android:scaleType="fitXY"
            android:class="lazy" data-src="@drawable/profile_top_img_bg"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <!--    内部的头像+姓名等信息    -->
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_name_info"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="50dp"
            android:layout_marginRight="15dp"
            android:orientation="horizontal"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent">
            <com.guadou.lib_baselib.view.CircleImageView
                android:id="@+id/iv_user_avatar"
                android:layout_width="74dp"
                android:layout_height="74dp"
                android:class="lazy" data-src="@color/gray"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
            <TextView
                android:id="@+id/iv_user_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/d_10dp"
                android:text="邓悠然"
                android:textColor="@color/black_33"
                android:textSize="@dimen/d_20sp"
                app:layout_constraintBottom_toTopOf="@id/tv_user_mobile"
                app:layout_constraintLeft_toRightOf="@id/iv_user_avatar"
                app:layout_constraintRight_toLeftOf="@id/tv_user_resume"
                app:layout_constraintTop_toTopOf="@id/iv_user_avatar" />
            <TextView
                android:id="@+id/tv_user_mobile"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/shape_profile_mobile_bg"
                android:drawableLeft="@drawable/profile_mobile_icon"
                android:drawablePadding="4.5dp"
                android:paddingLeft="@dimen/d_10dp"
                android:paddingTop="@dimen/d_5dp"
                android:paddingRight="@dimen/d_10dp"
                android:paddingBottom="@dimen/d_5dp"
                android:text="18961023119"
                android:textColor="@color/black_33"
                android:textSize="@dimen/d_14sp"
                app:layout_constraintBottom_toBottomOf="@id/iv_user_avatar"
                app:layout_constraintLeft_toLeftOf="@id/iv_user_name"
                app:layout_constraintTop_toBottomOf="@id/iv_user_name" />
            <TextView
                android:id="@+id/tv_user_resume"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/shape_profile_resume_bg"
                android:drawableLeft="@drawable/profile_resume_icon"
                android:drawablePadding="@dimen/d_7dp"
                android:paddingLeft="@dimen/d_15dp"
                android:paddingTop="@dimen/d_8dp"
                android:paddingRight="@dimen/d_13dp"
                android:paddingBottom="@dimen/d_8dp"
                android:text="我的简历"
                android:textColor="@color/black_33"
                android:textSize="@dimen/d_14sp"
                app:layout_constraintBottom_toBottomOf="@id/iv_user_avatar"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="@id/iv_user_avatar"
                binding:clicks="@{click.gotoMyResume}" />
        </androidx.constraintlayout.widget.ConstraintLayout>
        <!--    内部的工作申请统计相关     -->
        <LinearLayout
            android:id="@+id/ll_job_info"
            android:layout_width="match_parent"
            android:layout_height="117dp"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="180dp"
            android:layout_marginRight="@dimen/d_15dp"
            android:background="@drawable/shape_white_round10"
            android:orientation="vertical">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/d_20dp"
                android:layout_marginTop="14.5dp"
                android:text="我的投递"
                android:textColor="@color/black_33"
                android:textSize="@dimen/d_16sp" />
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                android:paddingLeft="@dimen/d_5dp"
                android:paddingRight="@dimen/d_5dp">
                <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/selector_btn_white_gray_bg"
                    binding:clicks="@{click.gotoJobAll}">
                   ...
                </androidx.constraintlayout.widget.ConstraintLayout>
                <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/selector_btn_white_gray_bg"
                    binding:clicks="@{click.gotoJobPending}">
                   ...
                </androidx.constraintlayout.widget.ConstraintLayout>
                <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/selector_btn_white_gray_bg"
                    binding:clicks="@{click.gotoJobApplied}">
                    ...
                </androidx.constraintlayout.widget.ConstraintLayout>
                <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/selector_btn_white_gray_bg"
                    binding:clicks="@{click.gotoJobArrived}">
                   ...
                </androidx.constraintlayout.widget.ConstraintLayout>
                <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/selector_btn_white_gray_bg"
                    binding:clicks="@{click.gotoJobComplete}">
                    ...
                </androidx.constraintlayout.widget.ConstraintLayout>
            </LinearLayout>
        </LinearLayout>
        <!--    Profile底部列表     -->
        <androidx.core.widget.NestedScrollView
            android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="@color/page_bg"
            android:fillViewport="true"
            android:overScrollMode="never"
            android:scrollbars="vertical"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@id/ll_job_info">
        ...
       </androidx.core.widget.NestedScrollView>
    </androidx.constraintlayout.motion.widget.MotionLayout>

定义的场景xml:

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">
    <Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@+id/start"
        motion:duration="350">
        <OnSwipe
            motion:dragDirection="dragUp"
            motion:touchAnchorId="@id/scrollView" />
        <KeyFrameSet>
            <KeyPosition
                motion:alpha="0"
                motion:framePosition="25"
                motion:keyPositionType="parentRelative"
                motion:motionTarget="@+id/cl_name_info" />
        </KeyFrameSet>
    </Transition>
    <ConstraintSet android:id="@+id/start">
        <Constraint
            android:id="@id/status_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alpha="0"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/iv_top_bg"
            android:layout_width="0dp"
            android:layout_height="245dp"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintRight_toRightOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/cl_name_info"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="50dp"
            android:layout_marginRight="15dp"
            android:alpha="1"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintRight_toRightOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/ll_job_info"
            android:layout_width="match_parent"
            android:layout_height="117dp"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="180dp"
            android:layout_marginRight="@dimen/d_15dp"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintRight_toRightOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/ll_job_info" />
    </ConstraintSet>
    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@id/status_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alpha="1"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/iv_top_bg"
            android:layout_width="0dp"
            android:layout_height="0dp"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintRight_toRightOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/cl_name_info"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="50dp"
            android:layout_marginRight="15dp"
            android:alpha="0"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintRight_toRightOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />
        <Constraint
            android:id="@id/ll_job_info"
            android:layout_width="match_parent"
            android:layout_height="117dp"
            android:layout_marginLeft="@dimen/d_15dp"
            android:layout_marginTop="10dp"
            android:layout_marginRight="@dimen/d_15dp"
            motion:layout_constraintLeft_toLeftOf="parent"
            motion:layout_constraintRight_toRightOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/status_view" />
        <Constraint
            android:id="@id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintTop_toBottomOf="@id/ll_job_info" />
    </ConstraintSet>
</MotionScene>

效果:

总结

类似这样的协调滚动布局,当底部列表滑动的时候,顶部的布局做响应的动作,我们都可以通过 AppBarLayout 和 MotionLayout 来实现。区别只是AppBarLayout实现起来更简单,MotionLayout 的定义可以更细。

需要注意的是 AppBarLayout 定义的方式 可以定义一些相对复杂的页面,如果非常复杂的元素使用 MotionLayout 来作为跟视图,全部的布局一股脑的写在 MotionLayout 中,那么可能导致性能问题的,最直观的感受是启动这个Activity都会很慢。

其实在高刷屏流行的今天,留给我们布局上屏的处理时间越来越少了,如果是特别复杂或是嵌套较深的布局,一定要慎重使用。常见的优化方式是异步加载布局、先展示占位图、优化 MotionLayout 布局,只包裹需要改变的视图。

到此这篇关于Android中协调滚动常用的布局实现代码的文章就介绍到这了,更多相关Android协调滚动布局内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android中协调滚动布局的实现代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android嵌套滚动与协调滚动如何实现

本文小编为大家详细介绍“Android嵌套滚动与协调滚动如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android嵌套滚动与协调滚动如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Coord
2023-07-02

Android嵌套滚动和协调滚如何实现

这篇文章主要介绍了Android嵌套滚动和协调滚如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android嵌套滚动和协调滚如何实现文章都会有所收获,下面我们一起来看看吧。Android的嵌套滚动的几种
2023-07-02

android 实现ScrollView自动滚动的实例代码

有时候需要动态添加数据,屏幕显示满了,数据需要滚动展示。这里主要弄懂scrollTo(0, off)方法的含义喊用法。 含义不说了,大概意思就这样。 下面来看他的用法:代码如下:private void searchResultShow()
2022-06-06

Android进阶CoordinatorLayout协调者布局实现吸顶效果

这篇文章主要为大家介绍了Android进阶CoordinatorLayout协调者布局实现吸顶效果,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-29

基于Android代码实现常用布局

关于 android 常用布局,利用 XML 文件实现已经有很多的实例了。但如何利用代码实现呢?当然利用代码实现没有太大的必要,也是不提倡的,但我觉得利用代码实现这些布局,可以更好的了解 SDK API ,所以在此也整理一些,和大家分享一下
2022-06-06

Android自定义ViewGroup实现可滚动的横向布局(2)

上一篇文章自定义viewgroup(1)地址://www.jb51.net/article/100608.htm 这里直接代码:package com.example.libingyuan.horizontallistview.Scroll
2022-06-06

Android中实现自动生成布局View的初始化代码方法

在android开发过程中,界面布局是及其重要的,但同时也是复杂。有的时候我们急于实际运行查看布局效果。但是android的编译速度我实在不想吐槽啥,尤其在布局越来越复杂,项目越来越大,资源文件越来越多的情况下。 尤其是是android的v
2022-06-06

神奇的listView实现自动显示隐藏布局Android代码

借助View的OnTouchListener接口来监听listView的滑动,通过比较与上次坐标的大小,判断滑动方向,并通过滑动方向来判断是否需显示或者隐藏对应的布局,并且带有动画效果。1.自动显示隐藏Toolbar首先给listView增
2022-06-06

Android代码实现AdapterViews和RecyclerView无限滚动

应用的一个共同的特点就是当用户欢动时自动加载更多的内容,这是通过用户滑动触发一定的阈值时发送数据请求实现的。 相同的是:信息实现滑动的效果需要定义在列表中最后一个可见项,和某些类型的阈值以便于开始在最后一项到达之前开始抓取数据,实现无限的
2022-06-06

Android 实现伸缩布局效果示例代码

最近项目实现下面的图示的效果,本来想用listview+gridview实现,但是貌似挺麻烦的于是就用flowlayout 来addview实现添加伸缩的效果,实现也比较简单。mainActivity 布局2022-06-06

Android中布局保存成图片实例代码

一、前言 有一个朋友问做过截屏的小功能没,自己没有做过。但是想了一下,实现的过程。实现截屏就是为了截取咱们应用中的部分布局,然后实现将保存在本地,或将其分享,或将其通过第三方的平台分享出去。自己可能是受了截屏这两个字的影响,想当然的去梳理自
2022-06-06

Android代码实现图片和文字上下布局

在Android开发中经常会需要用到带文字和图片的button,下面来给大家介绍使用radiobutton实现图片和文字上下布局或左右布局。代码很简单就不给大家多解释了。布局文件很简单,用来展示RadioBUtton的使用方法。
2022-06-06

JavaScript实现瀑布流布局的代码分享

不知道大家在线上购物的时候有没有发现到,自己逛起来根本就停不下来,越往下翻越是觉得就会出现需要的东西,这就是很多电商公司都在使用的瀑布流布局。本文就来用JS实现这一布局,需要的可以参考一下
2023-05-15

Android 四种动画效果的调用实现代码

(1) main.xml 代码如下:(声明四个按钮控件) XML代码: 代码如下: 2022-06-06

Android实现两个ScrollView互相联动的同步滚动效果代码

本文实例讲述了Android实现两个ScrollView互相联动的同步滚动效果代码。分享给大家供大家参考,具体如下: 最近在做一个项目,用到了两个ScrollView互相联动的效果,简单来说联动效果意思就是滑动其中的一个ScrollView
2022-06-06

Android中捕获全局异常实现代码

1、实现UncaughtExceptionHandler,在方法uncaughtException中处理没有捕获的异常。public class GlobalException implements UncaughtExceptionHan
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录