欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android滑動組件懸浮固定在頂部效果

 更新時間:2020年04月08日 16:29:08   作者:ganshenml  
這篇文章主要為大家詳細(xì)介紹了Android滑動組件懸浮固定在頂部效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android滑動組件懸浮固定在頂部效果的具體代碼,供大家參考,具體內(nèi)容如下

要想實現(xiàn)的效果是如下:

場景:有些時候是內(nèi)容中間的組件當(dāng)滑動至頂部的時候固定顯示在頂部。

實現(xiàn)的思路:

1.目標(biāo)組件(button)有兩套,放在頂部和內(nèi)容中間;

2.當(dāng)內(nèi)容中間的組件滑動至頂部欄位置時控制顯示/隱藏頂部和中間的組件(涉及到組件獲取在屏幕的位置知識點);

activity代碼:

public class MainActivity extends AppCompatActivity implements ObservableScrollView.ScrollViewListener { 
 private ObservableScrollView scrollView; 
 private Button topBtn1, topBtn2, middleBtn1, middleBtn2; 
 private View topPanel, middlePanel; 
 private int topHeight; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
  initViews(); 
  initListeners(); 
 
 } 
 
 @Override 
 public void onWindowFocusChanged(boolean hasFocus) { 
  super.onWindowFocusChanged(hasFocus); 
 
  Rect frame = new Rect(); 
  getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); 
  int statusBarHeight = frame.top;//狀態(tài)欄高度 
 
  int titleBarHeight = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();//標(biāo)題欄高度 
  topHeight = titleBarHeight + statusBarHeight; 
 } 
 
 
 private void initViews() { 
  scrollView = (ObservableScrollView) findViewById(R.id.scrollView); 
  topPanel = findViewById(R.id.topPanel); 
  topBtn1 = (Button) topPanel.findViewById(R.id.button1); 
  topBtn2 = (Button) topPanel.findViewById(R.id.button2); 
 
  middlePanel = findViewById(R.id.middlePanel); 
  middleBtn1 = (Button) middlePanel.findViewById(R.id.button1); 
  middleBtn2 = (Button) middlePanel.findViewById(R.id.button2); 
 
 } 
 
 private void initListeners() { 
  topBtn1.setOnClickListener(new View.OnClickListener() { 
   @Override 
   public void onClick(View view) { 
    middleBtn1.setBackgroundColor(Color.WHITE); 
    topBtn1.setBackgroundColor(Color.WHITE); 
   } 
  }); 
 
  middleBtn1.setOnClickListener(new View.OnClickListener() { 
   @Override 
   public void onClick(View view) { 
    middleBtn1.setBackgroundColor(Color.BLUE); 
    topBtn1.setBackgroundColor(Color.BLUE); 
   } 
  }); 
 
  scrollView.setScrollViewListener(this); 
 
 
 } 
 
 
 @Override 
 public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) { 
  int[] location = new int[2]; 
  middleBtn1.getLocationOnScreen(location); 
  int locationY = location[1]; 
  Log.e("locationY", locationY + " " + "topHeight的值是:" + topHeight); 
 
  if (locationY <= topHeight && (topPanel.getVisibility() == View.GONE || topPanel.getVisibility() == View.INVISIBLE)) { 
   topPanel.setVisibility(View.VISIBLE); 
  } 
 
  if (locationY > topHeight && topPanel.getVisibility() == View.VISIBLE) { 
   topPanel.setVisibility(View.GONE); 
  } 
 
 } 
} 

要點解析:

1.在onWindowFocusChanged()方法中獲取屏幕狀態(tài)欄和標(biāo)題欄的高度(在onCreate()方法中是獲取是0);

2.因為布局中的ScrollView的onScrollChangeListener()方法低版本API不支持——>所以activity實現(xiàn)了自定義ScrollView中的onScrollChanged()接口方法——>在此方法中實現(xiàn)組件的顯示/隱藏;

自定義ScrollView的代碼:

public class ObservableScrollView extends ScrollView { 
 
 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); 
  } 
 } 
 
 public interface ScrollViewListener { 
 
  void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); 
 
 } 
} 

然后是布局文件:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/activity_main" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context="com.example.administrator.slideholdapp.MainActivity"> 
 
 <com.example.administrator.slideholdapp.ObservableScrollView 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:id="@+id/scrollView"> 
 
  <LinearLayout 
   android:layout_width="match_parent" 
   android:layout_height="wrap_content" 
   android:orientation="vertical"> 
 
   <TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="30dp" 
    android:text="@string/content" /> 
 
   <include android:id="@+id/middlePanel" layout="@layout/middle_item_layout"></include> 
 
   <TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="30dp" 
    android:text="@string/content" /> 
 
 
  </LinearLayout> 
 
 </com.example.administrator.slideholdapp.ObservableScrollView> 
 
 <include android:id="@+id/topPanel" layout="@layout/middle_item_layout" android:visibility="gone"/> 
</FrameLayout> 

更多關(guān)于滑動功能的文章,請點擊專題: 《Android滑動功能》

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android ListView控件使用方法

    Android ListView控件使用方法

    這篇文章主要為大家詳細(xì)介紹了Android ListView控件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android:利用SharedPreferences實現(xiàn)自動登錄

    Android:利用SharedPreferences實現(xiàn)自動登錄

    本篇文章主要介紹了Android實現(xiàn)自動登錄,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 詳解Android中的SharedPreferences

    詳解Android中的SharedPreferences

    這篇文章主要介紹了Android中的SharedPreferences,包括 SharedPreferences的特點和使用方法,需要的朋友可以參考下
    2017-05-05
  • Android布局之RelativeLayout相對布局

    Android布局之RelativeLayout相對布局

    RelativeLayout是相對布局控件:以控件之間相對位置或相對父容器位置進(jìn)行排列,下面通過本文給大家介紹Android布局之RelativeLayout相對布局,涉及到android relativelayout相對布局相關(guān)知識,對android relativelayout相對布局相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Android日歷控件的實現(xiàn)方法

    Android日歷控件的實現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Android如何打造自己的日歷控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Android 實例開發(fā)一個學(xué)生管理系統(tǒng)流程詳解

    Android 實例開發(fā)一個學(xué)生管理系統(tǒng)流程詳解

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個學(xué)生管理系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • Android實戰(zhàn)教程第九篇之短信高效備份

    Android實戰(zhàn)教程第九篇之短信高效備份

    這篇文章主要為大家詳細(xì)介紹了Android實戰(zhàn)教程第九篇之短信高效備份,利用xml序列化器備份短信,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 違章查詢源碼分享

    違章查詢源碼分享

    本文主要分享了違章查詢源碼,特附上源碼下載地址和測試安裝包下載地址。需要的朋友一起來看下吧
    2016-12-12
  • Flutter進(jìn)階之實現(xiàn)動畫效果(八)

    Flutter進(jìn)階之實現(xiàn)動畫效果(八)

    這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實現(xiàn)動畫效果的第八篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android 屏幕截屏方法匯總

    Android 屏幕截屏方法匯總

    這篇文章主要介紹了Android 屏幕截屏方法匯總的相關(guān)資料,需要的朋友可以參考下
    2016-02-02

最新評論