zoukankan      html  css  js  c++  java
  • 自定义Scrollview--实现仿淘宝Toolbar透明度渐变效果

    1上个月做了下电商的项目,本来以为本简单的,但做起来还是遇到了不少的问题,上个周五项目就上线了,不过时间还是很紧,PM给了我两天时间总结总结,然后又要开始一个新的项目和这个项目的迭代,感觉又要开始累死了。不瞎扯了,今天是要实现类似于淘宝Toobar的效果,先看一下淘宝的效果:

    再看看我们项目中实现的效果:

    2,这里我上面的返回和购物车的图片在渐变的时候没有细节的处理,所以导致切换照片的时候有点突然,不过大体的功能还是差不多的,其实实现这种效果还是挺简单的,就是自营以一个Scrollview监听他的滑动事件,然后更新上面的Toobar透明度,好了,不多说了 ,直接看代码把。

    TranslucentScrollView.java
    package com.qianmo.projectfunctionpoint;
    
    /**
     * Created by wangjitao on 2016/8/29 0029.
     */
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.widget.ScrollView;
    
    public class TranslucentScrollView extends ScrollView {
        private OnScrollChangedListener mOnScrollChangedListener;
    
        public TranslucentScrollView(Context context) {
            super(context);
        }
    
        public TranslucentScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public TranslucentScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        protected void onScrollChanged(int l, int t, int oldl, int oldt) {
            super.onScrollChanged(l, t, oldl, oldt);
            if (mOnScrollChangedListener != null) {
                mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt);
            }
        }
    
        public void setOnScrollChangedListener(OnScrollChangedListener listener) {
            mOnScrollChangedListener = listener;
        }
    
        public interface OnScrollChangedListener {
            void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt);
        }
    }
    

     activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    
        <include layout="@layout/toolbar"/>
    
        <com.qianmo.projectfunctionpoint.TranslucentScrollView
            android:id="@+id/scrollview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                >
    
                <ImageView
                    android:id="@+id/iv_head"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/dimen_300"
                    android:scaleType="centerCrop"
                    android:src="@mipmap/bg_image"
                    />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:background="#ff0000"
                    />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:background="#00ff00"
                    />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:background="#0000ff"
                    />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:background="#00ffff"
                    />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:background="#ff00ff"
                    />
            </LinearLayout>
        </com.qianmo.projectfunctionpoint.TranslucentScrollView>
    
    </RelativeLayout>
    

      MainActivity.java

    package com.qianmo.projectfunctionpoint;
    
    import android.graphics.Color;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ScrollView;
    
    public class MainActivity extends AppCompatActivity implements TranslucentScrollView.OnScrollChangedListener {
        private TranslucentScrollView scrollView;
        private Toolbar toolbar;
    
        private float headerHeight;//顶部高度
        private float minHeaderHeight;//顶部最低高度,即Bar的高度
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initView();
        }
    
        private void initView() {
            scrollView = (TranslucentScrollView) findViewById(R.id.scrollview);
            scrollView.setOnScrollChangedListener(this);
            toolbar = (Toolbar) findViewById(R.id.toolbar);
            toolbar.setBackgroundColor(Color.argb(0, 18, 176, 242));
            initMeasure();
        }
    
        private void initMeasure() {
            headerHeight = getResources().getDimension(R.dimen.dimen_300);
            minHeaderHeight = getResources().getDimension(R.dimen.abc_action_bar_default_height_material);
    
        }
    
        @Override
        public void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt) {
            //Y轴偏移量
            float scrollY = who.getScrollY();
    
            //变化率
            float headerBarOffsetY = headerHeight - minHeaderHeight;//Toolbar与header高度的差值
            float offset = 1 - Math.max((headerBarOffsetY - scrollY) / headerBarOffsetY, 0f);
    
            //Toolbar背景色透明度
            toolbar.setBackgroundColor(Color.argb((int) (offset * 255), 18, 176, 242));
    
    //        //header背景图Y轴偏移
    //        imgHead.setTranslationY(scrollY / 2);
        }
    }
    

    ok这样的话我们的效果就实现了,看一下抽出来的Demo

     补:Demo下载链接 http://download.csdn.net/detail/w543441727/9615978 (对不起,开启骗积分模式 2333)

  • 相关阅读:
    fopen
    alsa 编程
    Alsa中PCM参数设置⭐⭐
    malloc、calloc、realloc和alloca各种的区别
    微信支付:微信支付遇到的坑:jssdk,phpdemo,微信支付提示{"errMsg":"chooseWXPay:fail"}
    java: 观察者模式:Observable被观察者,Observer观察者
    java: Comparable比较器,定义二叉操作类
    java: Comparable比较器,数组对象比较器
    微信支付:价格问题:如果支付金额是单位是分,不能带小数点
    centos:rpm安装,软件安装
  • 原文地址:https://www.cnblogs.com/wjtaigwh/p/5818371.html
Copyright © 2011-2022 走看看