美文网首页UI
Android标题栏颜色渐变效果的实现

Android标题栏颜色渐变效果的实现

作者: 程思扬 | 来源:发表于2018-12-21 19:19 被阅读0次
    SM-N9500_20181221190414_1_1.gif

    之前经常在网上看到这种效果,猜想是滚动listview来改变标题栏的颜色,担心感觉那个应用的比较少,今天项目里需要这样的效果,我就想用scrollview来实现一下,废话少说,上图为要实现的效果(网易考拉商品详情页)。

    直接上代码:

    核心类GradationScrollView

    
    /**
     *  @author  程龙
     *  @data  2018/12/21
     *  带滚动监听的scrollview
     */
    public class GradationScrollView extends ScrollView {
    
        public interface ScrollViewListener {
    
            void onScrollChanged(GradationScrollView scrollView, int x, int y,
                                 int oldx, int oldy);
    
        }
    
        private ScrollViewListener scrollViewListener = null;
    
        public GradationScrollView(Context context) {
            super(context);
        }
    
        public GradationScrollView(Context context, AttributeSet attrs,
                                   int defStyle) {
            super(context, attrs, defStyle);
        }
    
        public GradationScrollView(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);
            }
        }
    
    }
    

    具体使用(MainActivity.java)

    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<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.data));
            listView.setAdapter(adapter);
        }
     
     
     
        @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));
            } else if (y > 0 && y <= imageHeight) {
                float scale = (float) y / imageHeight;
                float alpha = (255 * scale);
                
                textView.setBackgroundColor(Color.argb((int) alpha, 227, 29, 26));
            } else {
                textView.setBackgroundColor(Color.argb((int) 255, 227, 29, 26));
            }
        }
    }
    

    XML(activity_main.xml)

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="${relativePackage}.${activityClass}" >
     
        <com.jukopro.titlebarcolor.ObservableScrollView
            android:id="@+id/scrollview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="none" >
     
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
     
                <ImageView
                    android:id="@+id/imageview"
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:background="@drawable/zuqiu" />
     
                <com.jukopro.titlebarcolor.MyListview
                    android:id="@+id/listview"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >
                </com.jukopro.titlebarcolor.MyListview>
            </LinearLayout>
        </com.jukopro.titlebarcolor.ObservableScrollView>
     
        <TextView
            android:id="@+id/textview"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:gravity="center"
            android:text="我是标题"
            android:textSize="18sp"
            android:textColor="@android:color/white"
            android:background="#00000000" />
     
    </RelativeLayout>
    

    以上就是该功能实现代码,大家可根据自己需要进行更改。

    相关文章

      网友评论

        本文标题:Android标题栏颜色渐变效果的实现

        本文链接:https://www.haomeiwen.com/subject/cvmvkqtx.html