国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android開發(fā)實現(xiàn)標題隨scrollview滑動變色的方法詳解

2019-10-22 18:22:54
字體:
供稿:網(wǎng)友

本文實例講述了Android開發(fā)實現(xiàn)標題隨scrollview滑動變色的方法。分享給大家供大家參考,具體如下:

要實現(xiàn)某個view的背景透明度跟隨scrollview滑動而改變需要重新scrollview的onOverScrolled方法,該方法隨著滑動變化(包括手指滑動、手指移開慣性滑動)而響應,所以最適合做變色處理。

step1:設定布局

由于我們要實現(xiàn)的是滑動時標題的背景透明度改變,固定頂部的標題view不能在srcollview里面跟隨滑動,所以需要這樣布局:

<FrameLayout    android:layout_width="match_parent"    android:layout_height="match_parent">    <com.****.ScrollChangeScrollView      android:id="@+id/scrollView"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:fillViewport="true">      <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">          <TextView            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:drawablePadding="5dp"            android:drawableTop="@drawable/dicovery_vintner_icon_wine"            android:gravity="center"            android:text="葡萄酒"            android:textColor="@color/hometitlebg" />      </LinearLayout>    </com.***.ScrollChangeScrollView>    <Button      android:id="@+id/btn_back"      android:layout_width="match_parent"      android:layout_height="35dp"      android:layout_centerVertical="true"      android:background="@null"      android:drawableLeft="@drawable/icon_back"      android:padding="10dp" /></FrameLayout>

step2:添加需要用到的方法

滑動時,某個view要變色,重新scrollview后,添加方法讓其知道該view需要變色

private View mTitleView;/*** 變色標題view* @param view*/public void setupTitleView (View view) {    this.mTitleView = view;}

滑動時變色需要參考scrollview里面的某個子view的滑動高度,如果該子view上劃完全劃出屏幕,則標題view背景透明為0:

private View mByWhichView;/*** 跟隨的view* @param view*/public void setupByWhichView(View view) {    mByWhichView = view;}

再添加一個設置,如果不要背景透明度漸變:

private boolean shouldSlowlyChange;public void setShouldSlowlyChange(boolean slowlyChange) {    this.shouldSlowlyChange = slowlyChange;}

step3:代碼實現(xiàn)

** * 滑動時標題變色view * Created by george.yang on 16/2/21. */public class ScrollChangeScrollView extends ScrollView {  private View mByWhichView;  private View mTitleView;  private boolean shouldSlowlyChange = true;  public ScrollChangeScrollView(Context context) {    super(context);  }  public ScrollChangeScrollView(Context context, AttributeSet attrs) {    super(context, attrs);  }  public ScrollChangeScrollView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);  }  @TargetApi(Build.VERSION_CODES.LOLLIPOP)  public ScrollChangeScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {    super(context, attrs, defStyleAttr, defStyleRes);  }  @Override  public void scrollTo(int x, int y) {    //這是為了修復noScrllListView嵌套在srcollview時就自動滑動到noscrolllistview的頂部的bug,不影響使用    if (x == 0 && y == 0 || y <= 0) {      super.scrollTo(x, y);    }  }  public void setListener(OnScrollListener listener){    this.mListener = listener;  }  public void setShouldSlowlyChange(boolean slowlyChange) {    this.shouldSlowlyChange = slowlyChange;  }  /**   * 設置透明度漸變的標題view   * @param view   */  public void setupTitleView (View view) {    this.mTitleView = view;  }  /**   * 跟隨的view   * @param view   */  public void setupByWhichView(View view) {    mByWhichView = view;  }  @Override  protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX,                 boolean clampedY) {    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);    if (scrollY >= mByWhichView.getTop() + mByWhichView.getMeasuredHeight()) {      mTitleView.setBackgroundColor(Color.BLACK);    } else if (scrollY>=0) {      if (!shouldSlowlyChange) {        mTitleView.setBackgroundColor(Color.TRANSPARENT);      } else {        float persent = scrollY * 1f / (mByWhichView.getTop() + mByWhichView.getMeasuredHeight());        int alpha = (int) (255 * persent);        int color = Color.argb(alpha,0,0,0);        mTitleView.setBackgroundColor(color);      }    }    if (mListener!=null) {      mListener.onScroll(scrollX, scrollY);    }  }}

效果如下:

滑動前

Android,標題,scrollview,滑動變色

滑動變色中

Android,標題,scrollview,滑動變色

參考的view超出屏幕后

Android,標題,scrollview,滑動變色

 

希望本文所述對大家Android程序設計有所幫助。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 馆陶县| 竹北市| 扎赉特旗| 靖边县| 高邑县| 玉环县| 湟中县| 宁国市| 红河县| 阳信县| 钟山县| 商丘市| 阳江市| 杂多县| 安西县| 垦利县| 焦作市| 宜兴市| 新沂市| 平罗县| 庐江县| 正宁县| 台中市| 嘉祥县| 吉隆县| 安国市| 临泉县| 宣恩县| 碌曲县| 九台市| 天峻县| 青川县| 临澧县| 鹤峰县| 大港区| 兴海县| 林芝县| 北京市| 建平县| 鄂州市| 兴宁市|