android仿知乎ScrollView滚动改变标题栏透明度

刷知乎的时候看到,专题栏里面 往下滚动标题栏会由透明逐渐变蓝色,觉得这个效果不错,就想自己写一下

这是自己实现的效果图:

说下实现思路:

1、先获取顶部图片的高度height,这个有3种方式获取,我用的是监听onGlobalLayout方法的回调

2、监听scrollview的滚动坐标,原生的没有这个监听,需要我们自己写个view继承scrollview,然后重写onScrollChanged()方法,创建一个监听,在这个方法里面回调

3、根据图片高度height和滚动的纵坐标y进行判断,算出比例,透明度范围0~255,根据比例设置改变的透明度,当y>height是不做改变

实现代码:

import com.example.d_changealphabyscroll.widget.ObservableScrollView;
import com.example.d_changealphabyscroll.widget.ObservableScrollView.ScrollViewListener;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ScrollView;

public class MainActivity extends Activity implements ScrollViewListener{

 private View layoutHead;
 private ObservableScrollView scrollView;
 private ImageView imageView;
 private WebView webView;

 private int height ;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 initView();
 }

 private void initView() {
 webView = (WebView) findViewById(R.id.webview1);
 scrollView = (ObservableScrollView) findViewById(R.id.scrollview);
 layoutHead = findViewById(R.id.view_head);
 imageView = (ImageView) findViewById(R.id.imageView1);
 layoutHead.setBackgroundColor(Color.argb(0, 0xfd, 0x91, 0x5b));

 //初始化webview
 //启用支持javascript
  WebSettings settings = webView.getSettings();
  settings.setJavaScriptEnabled(true);
  webView.loadUrl("http://www.topit.me/");
  //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
  webView.setWebViewClient(new WebViewClient(){
   @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
    view.loadUrl(url);
   return true;
  }
  });

 //获取顶部图片高度后,设置滚动监听
 ViewTreeObserver vto = imageView.getViewTreeObserver();
  vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
   @Override
   public void onGlobalLayout() {
    imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    height = imageView.getHeight();
    imageView.getWidth();

    scrollView.setScrollViewListener(MainActivity.this);
   }
  });

 }

 @Override
 public void onScrollChanged(ObservableScrollView scrollView, int x, int y,
 int oldx, int oldy) {

// Log.i("TAG","y--->"+y+" height-->"+height);
 if(y<=height){
 float scale =(float) y /height;
 float alpha = (255 * scale);
// Log.i("TAG","alpha--->"+alpha);

 //layout全部透明
// layoutHead.setAlpha(scale);

 //只是layout背景透明(仿知乎滑动效果)
 layoutHead.setBackgroundColor(Color.argb((int) alpha, 0xfd, 0x91, 0x5b));
 }

 }
}

带滚动监听的scrollview

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,
 int defStyle) {
 super(context, attrs, defStyle);
 }

 public ObservableScrollView(Context context, AttributeSet attrs) {
 super(context, attrs);
 }

 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);
 }
 }

}

Demo下载地址:点击打开链接

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

(0)

相关推荐

  • Android 使用CoordinatorLayout实现滚动标题栏效果的实例

    在Material Design里,CoordinatorLayout通常用来作为顶层视图,来协调处理各个子View之间的动作,从而实现各种动画效果,如Snackbar与FloatingActionButton的配合显示效果,就是以CoordinatorLayout作为根布局来实现的 CoordinatorLayout提供Behaviors接口,子View通过实现Behaviors接口来协调和其它View之间的显示效果,可以这么理解: CoordinatorLayout让其子View之间互相知道

  • Android Support Library 标题栏(Toolbar)滚动效果实现方法

    首先来个效果图  布局文件代码 在布局文件中,CoordinatorLayout作为布局文件根节点,AppBarLayout包含在CoordinatorLayout中,toolbar在AppBarLayout节点下include进来. <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="

  • android仿知乎标题栏随ScrollView滚动变色

    本文实例为大家分享了android标题栏随ScrollView滚动变色的具体代码,供大家参考,具体内容如下 参考:Android之scrollview滑动使标题栏渐变背景色的实例代码 效果图: 核心类:ObservableScrollView package com.jukopro.titlebarcolor; import android.content.Context; import android.util.AttributeSet; import android.widget.Scrol

  • android仿知乎ScrollView滚动改变标题栏透明度

    刷知乎的时候看到,专题栏里面 往下滚动标题栏会由透明逐渐变蓝色,觉得这个效果不错,就想自己写一下 这是自己实现的效果图: 说下实现思路: 1.先获取顶部图片的高度height,这个有3种方式获取,我用的是监听onGlobalLayout方法的回调 2.监听scrollview的滚动坐标,原生的没有这个监听,需要我们自己写个view继承scrollview,然后重写onScrollChanged()方法,创建一个监听,在这个方法里面回调 3.根据图片高度height和滚动的纵坐标y进行判断,算出比

  • Android仿知乎悬浮功能按钮FloatingActionButton效果

    前段时间在看属性动画,恰巧这个按钮的效果可以用属性动画实现,所以就来实践实践.效果基本出来了,大家可以自己去完善. 首先看一下效果图: 我们看到点击FloatingActionButton后会展开一些item,然后会有一个蒙板效果,这都是这个View的功能.那么这整个View肯定是个ViewGroup,我们一部分一部分来看. 首先是这个最小的Tag: 这个Tag带文字,可以是一个TextView,但为了美观,我们使用CardView,CardView是一个FrameLayout,我们要让它具有显

  • Android仿知乎客户端关注和取消关注的按钮点击特效实现思路详解

    先说明一下,项目代码已上传至github,不想看长篇大论的也可以先去下代码,对照代码,哪里不懂点哪里. 代码在这https://github.com/zgzczzw/ZHFollowButton 前几天发现知乎关注的点击效果确实赞,查了一下实现方式,刚好看到这个问题,花了一天时间终于把这个效果实现了,现在来回答一下,很不幸,楼上各位的答案都不全对,且听我一一道来. 首先,我先详细观察了一些知乎的效果,其中有一个很神奇的地方,如图: 注意看第二张图,这个圆形在扩散的时候,圆形底下的字还在,而且新的

  • Android仿京东快报信息滚动效果

    先来看看效果吧,Android仿京东快报信息滚动效果,具体内容如下 (截图效果不是很好,但是差不多出来了) 代码: package com.test.scrolltransptoolbar; import android.content.Context; import android.graphics.Color; import android.os.Handler; import android.text.TextUtils; import android.util.AttributeSet;

  • Android仿知乎日报开屏页效果

    先看看知乎日报开屏页的效果,非常漂亮的开屏效果 ezgif.com-resize (2).gif 然后我来一个 ezgif.com-resize (1).gif 也不错~感觉可以以假乱真了~ 很简单,直接开始. 实现这个效果先制定个三步走策略 底部布局上滑展示. 画一个知弧. 显示图片 底部布局上滑展示 直接上代码吧,属性动画基本使用 private void startAnimation() { //位移动画,从底部滑出,Y方向移动,mHeight是底部布局的高度 ObjectAnimator

  • Android仿即刻首页垂直滚动图,炫酷到底!

    项目地址:https://github.com/JeasonWong/JikeGallery 话不多说,先上效果. 这个效果是在即刻app上看到,觉得很不错,遂仿之. 先说下我的实现思路(以上方的图片滚动为例,下方的文字实现效果类似): 自定义ViewGroup 装载两个ImageView和一个阴影View 通过一定规律交替控制两个ImageView和它们的marginTop,在onLayout()中实现 marginTop的具体值由属性动画控制,不断调用requestLayout() 接下来依

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

    之前也是在网上看到这种效果,不过是滚动listview来改变标题栏的颜色,感觉那个应用的比较少,比如我要滚动scrollview来实现呢,那么问题就来了,废话少说,看一下要实现的效果先(这是在项目应用的效果). 直接上源代码: 一.核心类(ObservableScrollView.java) package com.jukopro.titlebarcolor; import android.content.Context; import android.util.AttributeSet; im

  • Android仿淘宝商品浏览界面图片滚动效果

    用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个ScrollView滚动到最底下时会有提示,继续拖动才能浏览图片.仿照这个效果写一个出来并不难,只要定义一个Layout管理两个ScrollView就行了,当第一个ScrollView滑到底部时,再次向上滑动进入第二个ScrollView.效果如下: 需要注意的地方是: 1.如果是手动滑到底部需要再次按下才能继续往下滑,自动滚动到底部则不需要 2.在由上一个ScrollView滑动到下一个ScrollView的过程中多只手指相继拖动也不会导

  • Android仿淘宝商品拖动查看详情及标题栏渐变功能

    绪论 最近一直比较忙,也没抽出时间来写博客,也不得不说是自己犯了懒癌,人要是一懒就什么事都不想做了,如果不能坚持下来的话,那么估计就废了,��.最近自己攒了好多东西,接下来的时间我会慢慢都分享出来的.好了废话不多说了,下面我们开始正题: 今天要分享的是淘宝的详情页,之前在淘宝上买东西的时候看到淘宝的详情页效果比较不错,所以今天就来仿一下它的效果吧,可能没有淘宝的好,希望见谅啊. 先上效果图: 这是淘宝的: 我自己做的: 怎么样效果还差不多吧?GIF图效果看的不太清楚,见谅. 下面我们来看看怎么实

随机推荐