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

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

效果图:

核心类: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. ReactNative 在用react-navigation组件时,没有 navigator.getCurr
  3. android textView 加入连接方式
  4. android广播监听短信并显示内容
  5. Android(安卓)TV开发中所有的遥控器按键监听及注意事项,新增home
  6. Android自定义滚动条(ScrollBar)样式
  7. android 横向滚动屏幕实现(1)
  8. Android(安卓)重力感应
  9. Android(安卓)监听EditText文本输入 EditText监听事和输入事件

随机推荐

  1. 【linux】循序渐进学运维-cp
  2. 【linux】循序渐进学运维-mkdir
  3. CRMEBv4.X微商城/小程序商城/公众号商城/
  4. 【linux】循序渐进学运维-基础命令篇
  5. [linux] 循序渐进学运维-mv
  6. 超5亿Facebook用户的数据被泄露,扎克伯格
  7. 信息系统项目管理师1-1
  8. Linux格式化报错mkfs.ext4: undefined sy
  9. 【linux】实战扩展swap分区
  10. Linux运维方向文章汇总