最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

實(shí)現(xiàn)的思路:

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

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

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

要點(diǎn)解析:

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

2.因?yàn)椴季种械?span style="color: #800000">ScrollView的onScrollChangeListener()方法低版本API不支持——>所以activity實(shí)現(xiàn)了自定義ScrollView中的onScrollChanged()接口方法——>在此方法中實(shí)現(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)于滑動功能的文章,請點(diǎn)擊專題: 《Android滑動功能》

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

相關(guān)文章

最新評論

乌兰察布市| 新绛县| 保定市| 长岛县| 石家庄市| 中方县| 安康市| 鹤壁市| 赤壁市| 景洪市| 尼木县| 镇原县| 巫溪县| 永寿县| 台北县| 泸州市| 遂宁市| 商丘市| 柳林县| 伽师县| 邹城市| 柳江县| 时尚| 富顺县| 宁德市| 永和县| 始兴县| 黎城县| 宁阳县| 三江| 合肥市| 额尔古纳市| 原平市| 老河口市| 商洛市| 屯留县| 开原市| 胶州市| 荃湾区| 葵青区| 东城区|