上拉詳情的時候接觸到的,還是這平安的插件使用到的,折騰死我了,所以希望不要重蹈我的覆轍。這個開源控件相當強大,我瞭解的僅僅是一點點,希望知道多的留下博客網址供點擊!
AndroidSlidingUpPanel 是一個上拉麪板, 就是向上滑動的時候往上飛出一個顯示面板控件, 該庫效果在 Google Music, Google Maps and Rdio等 App 中用到。
用法:
-
使用com.sothree.slidinguppanel.SlidingUpPanelLayout作爲您的活動佈局的根元素。
-
佈局必須設置爲頂部或底部。請確保它有兩個元素。
-
第一個元素是你的主要佈局。第二個元素是你的向上滑動面板佈局。
-
主要佈局應當具有的寬度和高度設置爲match_parent。
-
滑動的佈局的寬度應設置爲match_parent;高度應設置爲match_parent,WRAP_CONTENT或最大desireable高度。
-
如果您想定義高度屏幕爲percetange,可將其設置爲match_parent,滑動視圖定義爲layout_weight屬性。
-
默認情況下,整個面板將作爲拖動區域和將截獲的點擊和拖動事件。可以通過使用setDragView方法或umanoDragView屬性限制牽引區到特定的圖。
<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
sothree:umanoPanelHeight="68dp"
sothree:umanoShadowHeight="4dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Main Content"
android:textSize="16sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|top"
android:text="The Awesome Sliding Up Panel"
android:textSize="16sp" />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
可以參考下。目前的項目需要信息保密,所以demo不能上傳,見諒,大家可以百度下或者自己去研究下源碼。
package com.pingan.pamaplib.module.base;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class SlidingUpPanelTestActivity extends Activity implements View.OnClickListener {
private static final String TAG = "SlidingUpPanel";
private SlidingUpPanelLayout mLayout;
private View headerView;
private Button btn;
private float offset;
@Override
public void onClick(View v) {
int id = v.getId();
if(id == R.id.add) {
//添加內容,並find頭部內容部分
View view = mLayout.loadView(R.layout.pamap_slidingup_content);
headerView = view.findViewById(R.id.header);
} else if(id == R.id.pamap_iv_back){
//頭部返回
if (mLayout != null &&
(mLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED || mLayout.getPanelState() == SlidingUpPanelLayout.PanelState.ANCHORED)) {
mLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
}
} else if(id == R.id.mid) {
if (mLayout.getAnchorPoint() == 1.0f) {
//居中停留
mLayout.setAnchorPoint(0.5f);
mLayout.setPanelState(SlidingUpPanelLayout.PanelState.ANCHORED);
} else {
//取消居中停留
mLayout.setAnchorPoint(1.0f);
mLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
}
}
else {
Toast.makeText(this, "@_" + id , Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pamap_slidingup);
mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);
//
//設置監聽器,並控制頭部的顯示及隱藏
mLayout.addPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() {
@Override
public void onPanelSlide(View panel, float slideOffset) {
//展開時slideOffset=1.0f; 摺疊時slideOffset=0;
Log.i(TAG, "onPanelSlide, offset " + slideOffset);
if(slideOffset>0.5f && headerView!=null) {
if(headerView.getVisibility()!=View.VISIBLE) {
headerView.setVisibility(View.VISIBLE);
}
}else if(slideOffset<=0.5f && headerView!=null){
if(headerView.getVisibility()==View.VISIBLE) {
headerView.setVisibility(View.GONE);
}
}
}
@Override
public void onPanelStateChanged(View panel, SlidingUpPanelLayout.PanelState previousState, SlidingUpPanelLayout.PanelState newState) {
Log.i(TAG, "onPanelStateChanged " + newState);
}
});
}
}
好了,這篇博客我以後會完善的,現在只是提醒下自己這個東西還要去研究!