本文实例为大家分享了android标题栏随ScrollView滚动变色的具体代码,供大家参考,具体内容如下

参考:Android之scrollview滑动使标题栏渐变背景色的实例代码

效果图:

android仿知乎标题栏随ScrollView滚动变色_第1张图片

核心类:ObservableScrollView

package com.jukopro.titlebarcolor;import android.content.Context;import android.util.AttributeSet;import android.widget.ScrollView;/** * 带滚动监听的scrollview */public class ObservableScrollView extends ScrollView {  public interface ScrollViewListener {    void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);  }  private ScrollViewListener scrollViewListener = null;  public ObservableScrollView(Context context) {    super(context);  }  public ObservableScrollView(Context context, AttributeSet attrs) {    super(context, attrs);  }  public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);  }  public void setScrollViewListener(ScrollViewListener scrollViewListener) {    this.scrollViewListener = scrollViewListener;  }  @Override  protected void onScrollChanged(int x, int y, int oldx, int oldy) {    super.onScrollChanged(x, y, oldx, oldy);    if (scrollViewListener != null) {      scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);    }  }}

MyListview

解决ScrollView嵌套Listview的滑动冲突:

public class MyListview extends ListView {  public MyListview(Context context) {    super(context);  }  public MyListview(Context context, AttributeSet attrs) {    super(context, attrs);  }  public MyListview(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);  }  @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);    super.onMeasure(widthMeasureSpec, expandSpec);  }} 

MainActivity

package com.jukopro.titlebarcolor;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.ViewTreeObserver;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.jukopro.titlebarcolor.ObservableScrollView.ScrollViewListener;public class MainActivity extends Activity implements ScrollViewListener {  private ObservableScrollView scrollView;  private ListView listView;  private ImageView imageView;  private TextView textView;  private int imageHeight;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    scrollView = (ObservableScrollView) findViewById(R.id.scrollview);    listView = (ListView) findViewById(R.id.listview);    imageView = (ImageView) findViewById(R.id.imageview);    textView = (TextView) findViewById(R.id.textview);    initListeners();    initData();  }  private void initListeners() {    // 获取顶部图片高度后,设置滚动监听    ViewTreeObserver vto = imageView.getViewTreeObserver();    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {      @Override      public void onGlobalLayout() {        imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);        imageHeight = imageView.getHeight();        scrollView.setScrollViewListener(MainActivity.this);      }    });  }  private void initData() {    ArrayAdapter adapter = new ArrayAdapter(MainActivity.this,       android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.data));    listView.setAdapter(adapter);  }  /**   * ScrollView滚动监听   *   * @param scrollView:滚动控件   * @param x:x轴坐标   * @param y:y轴坐标   * @param oldx:上一个x轴坐标   * @param oldy:上一个y轴坐标   */  @Override  public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {    if (y <= 0) {      textView.setBackgroundColor(Color.argb((int) 0, 227, 29, 26));//AGB由相关工具获得,或者美工提供    } else if (y > 0 && y <= imageHeight) {      float scale = (float) y / imageHeight;      float alpha = (255 * scale);      // 只是layout背景透明(仿知乎滑动效果)      textView.setBackgroundColor(Color.argb((int) alpha, 227, 29, 26));    } else {      textView.setBackgroundColor(Color.argb((int) 255, 227, 29, 26));    }  }}

布局:

                          

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. android通讯录实例(二)
  2. Android实现发送短信功能实例详解
  3. 我的android 第15天 -使用SQLiteOpenHelper获取用于操作数据库的
  4. android Timer的用法实例
  5. android中无限循环滑动的gallery实例
  6. Android中AlertDialog用法实例分析
  7. Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完
  8. Android开发实例之登录界面的实现
  9. Android JNI和NDK学习(09)--JNI实例二 传递类对象

随机推荐

  1. Android(安卓)UI开发第十九篇——介绍一
  2. How to build Android adb for ARM .
  3. android机顶盒获取有线mac
  4. Android开发大佬的Offer收割之旅,从字节跳
  5. Android Canvas学习笔记(1)
  6. android 键盘不弹出
  7. [Android]在Avtivity中注册监听器
  8. ANDROID轮播广告图片
  9. Android如何获取手机的屏幕宽高
  10. android Gridview生成程序快捷键的简单方