Android开发实现标题随scrollview滑动变色的方法详解

作者:touch_ping 时间:2022-10-04 07:52:24 

本文实例讲述了Android开发实现标题随scrollview滑动变色的方法。分享给大家供大家参考,具体如下:

要实现某个view的背景透明度跟随scrollview滑动而改变需要重新scrollview的onOverScrolled方法,该方法随着滑动变化(包括手指滑动、手指移开惯性滑动)而响应,所以最适合做变色处理。

step1:设定布局

由于我们要实现的是滑动时标题的背景透明度改变,固定顶部的标题view不能在srcollview里面跟随滑动,所以需要这样布局:


<FrameLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <com.****.ScrollChangeScrollView
     android:id="@+id/scrollView"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:fillViewport="true">
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">
         <TextView
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:drawablePadding="5dp"
           android:drawableTop="@drawable/dicovery_vintner_icon_wine"
           android:gravity="center"
           android:text="葡萄酒"
           android:textColor="@color/hometitlebg" />
     </LinearLayout>
   </com.***.ScrollChangeScrollView>
   <Button
     android:id="@+id/btn_back"
     android:layout_width="match_parent"
     android:layout_height="35dp"
     android:layout_centerVertical="true"
     android:background="@null"
     android:drawableLeft="@drawable/icon_back"
     android:padding="10dp" />
</FrameLayout>

step2:添加需要用到的方法

滑动时,某个view要变色,重新scrollview后,添加方法让其知道该view需要变色


private View mTitleView;
/**
* 变色标题view
* @param view
*/
public void setupTitleView (View view) {
   this.mTitleView = view;
}

滑动时变色需要参考scrollview里面的某个子view的滑动高度,如果该子view上划完全划出屏幕,则标题view背景透明为0:


private View mByWhichView;
/**
* 跟随的view
* @param view
*/
public void setupByWhichView(View view) {
   mByWhichView = view;
}

再添加一个设置,如果不要背景透明度渐变:


private boolean shouldSlowlyChange;
public void setShouldSlowlyChange(boolean slowlyChange) {
   this.shouldSlowlyChange = slowlyChange;
}

step3:代码实现


**
* 滑动时标题变色view
* Created by george.yang on 16/2/21.
*/
public class ScrollChangeScrollView extends ScrollView {
 private View mByWhichView;
 private View mTitleView;
 private boolean shouldSlowlyChange = true;
 public ScrollChangeScrollView(Context context) {
   super(context);
 }
 public ScrollChangeScrollView(Context context, AttributeSet attrs) {
   super(context, attrs);
 }
 public ScrollChangeScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
   super(context, attrs, defStyleAttr);
 }
 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
 public ScrollChangeScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
   super(context, attrs, defStyleAttr, defStyleRes);
 }
 @Override
 public void scrollTo(int x, int y) {
   //这是为了修复noScrllListView嵌套在srcollview时就自动滑动到noscrolllistview的顶部的bug,不影响使用
   if (x == 0 && y == 0 || y <= 0) {
     super.scrollTo(x, y);
   }
 }
 public void setListener(OnScrollListener listener){
   this.mListener = listener;
 }
 public void setShouldSlowlyChange(boolean slowlyChange) {
   this.shouldSlowlyChange = slowlyChange;
 }
 /**
  * 设置透明度渐变的标题view
  * @param view
  */
 public void setupTitleView (View view) {
   this.mTitleView = view;
 }
 /**
  * 跟随的view
  * @param view
  */
 public void setupByWhichView(View view) {
   mByWhichView = view;
 }
 @Override
 protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX,
                boolean clampedY) {
   super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
   if (scrollY >= mByWhichView.getTop() + mByWhichView.getMeasuredHeight()) {
     mTitleView.setBackgroundColor(Color.BLACK);
   } else if (scrollY>=0) {
     if (!shouldSlowlyChange) {
       mTitleView.setBackgroundColor(Color.TRANSPARENT);
     } else {
       float persent = scrollY * 1f / (mByWhichView.getTop() + mByWhichView.getMeasuredHeight());
       int alpha = (int) (255 * persent);
       int color = Color.argb(alpha,0,0,0);
       mTitleView.setBackgroundColor(color);
     }
   }
   if (mListener!=null) {
     mListener.onScroll(scrollX, scrollY);
   }
 }
}

效果如下:

滑动前

Android开发实现标题随scrollview滑动变色的方法详解

滑动变色中

Android开发实现标题随scrollview滑动变色的方法详解

参考的view超出屏幕后

Android开发实现标题随scrollview滑动变色的方法详解

希望本文所述对大家Android程序设计有所帮助。

来源:http://blog.csdn.net/u010499721/article/details/50724353

标签:Android,scrollview
0
投稿

猜你喜欢

  • 在SpringBoot中配置Thymeleaf的模板路径方式

    2021-11-26 17:34:26
  • C语言函数封装及变量的作用域

    2022-10-06 10:14:47
  • Java 中的HashMap详解和使用示例_动力节点Java学院整理

    2022-06-10 18:08:51
  • 关于后端如何解决跨域的问题说明

    2023-09-19 00:59:10
  • mybatis like模糊查询特殊字符报错转义处理方式

    2023-09-02 21:14:54
  • Android禁止横屏竖屏切换的有效方法

    2023-05-05 10:56:16
  • 深入理解C# 装箱和拆箱(整理篇)

    2023-10-04 02:13:13
  • WinForm实现的图片拖拽与缩放功能示例

    2021-06-18 09:17:26
  • Android第三方控件PhotoView使用方法详解

    2021-12-07 20:35:48
  • Android WebView 不支持 H5 input type="file" 解决方法

    2022-08-30 21:07:08
  • RocketMQ生产者调用start发送消息原理示例

    2022-07-05 20:13:04
  • Java类的继承实例详解(动力节点Java学院整理)

    2023-01-28 13:19:31
  • Mybatis使用大于等于或小于等于进行比较

    2021-12-25 10:21:44
  • Java线程同步、同步方法实例详解

    2023-10-16 07:10:53
  • c# 圆形识别方案和直线识别方案的参考示例

    2022-03-10 13:44:11
  • 详解C#的排列组合

    2021-06-05 15:40:11
  • C#简单实现显示中文格式星期几的方法

    2021-09-08 12:27:05
  • 百度人脸识别之人脸识别FaceIdentify(签到考勤)

    2022-08-24 18:25:03
  • Springboot 整合shiro实现权限控制的方法

    2021-09-21 20:15:47
  • Android数据共享 sharedPreferences 的使用方法

    2023-06-19 01:43:07
  • asp之家 软件编程 m.aspxhome.com