編輯:關於Android編程
之前寫輪播條或者指示器的時候都是UI圖裡面直接有,這樣的效果並不好,給用戶的體驗比較差,所以閒暇之余自己寫了個指示器,可以展現出一個優雅的效果,當手指 當手指滑動的時候小圓點會跟著一點一點的滑動,當手指停下時,小紅點也跟著停下來。首先我說說我實現的這個原理吧
首先在布局文件裡面寫上線性布局,表示底部的小圓點,方向和位置,然後再在shape裡面自繪小圓點。再在代碼裡面裡用布局寫出,具體步驟如下:
1、使用LayParams給布局裡面添加未選中的小圓點,例如灰色;
2、設置小紅點,表示滑動後的狀態。
3、獲取小圓點之間的距離,這裡要獲取小圓點的距離不能簡單地getWidth,getHeiget,這樣是獲取不到的 ,這裡要用到視圖樹來觀察兩個點距離左側屏幕之間的距離,然後求差獲取距離。
4、在監聽viewpager的時候獲取兩者的距離。
代碼如下:
一、布局文件
<!--小紅點,小圓點的滑動,具體布局在代碼裡面寫的--> <?xml version="1.0" encoding="utf-8"?> <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"> <android.support.v4.view.ViewPager android:id="@+id/vp_pager" android:layout_width="match_parent" android:layout_height="match_parent"/> <Button android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="60dp" android:background="#FFF107" android:paddingLeft="10dp" android:paddingRight="10dp" android:textSize="20sp" android:text="開始體驗" android:visibility="gone"/> <!--小紅點,小圓點的滑動,具體布局在代碼裡面寫的--> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp"> <LinearLayout android:id="@+id/ll_point_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> </LinearLayout> <View android:id="@+id/view_red_point" android:layout_width="10dp" android:layout_height="10dp" android:background="@drawable/shape_guide_point_selected"/> </RelativeLayout> </RelativeLayout> <!--普通的圓點--> <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="@android:color/darker_gray" /> </shape> <!--小紅點的圓點--> <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="#f00" /> </shape>
二、代碼
/**
* 初始化viewpager的數據
*/
private void initView() {
int[] icons = {R.mipmap.guide1,R.mipmap.guide2,R.mipmap.guide3,R.mipmap.guide4};
mList = new ArrayList<>();
for (int i = 0; i < icons.length; i++) {
ImageView view = new ImageView(this);
view.setBackgroundResource(icons[i]); //只有設置了背景才能填充滿屏幕
mList.add(view);
//設置,灰色的小圓點,表示滑動時候的狀態
View point = new View(this);
point.setBackgroundResource(R.drawable.shape_guide_point_default); //設置背景
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DensityUtils.dp2px(this,10), DensityUtils.dp2px(this,10));
point.setLayoutParams(params);
if (i != 0) {
params.leftMargin = DensityUtils.dp2px(this, 10);
}
llpointGroup.addView(point);
}
}
三、獲取小紅點之間的距離
/**
* 初始化小紅點之間的距離
*/
private void initPoint() {
// measure -> layout -> draw
viewRedPoint.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
//完成布局後回調該方法,該方法有可能被多次回調
@Override
public void onGlobalLayout() {
viewRedPoint.getViewTreeObserver().removeGlobalOnLayoutListener(this);
mPointWidth = llpointGroup.getChildAt(1).getLeft() - llpointGroup.getChildAt(0).getLeft();
}
});
}
四、讓小紅點聯動
/**
* viewpager的頁面滑動的監聽
*/
private void initScrollListen() {
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//當頁面被滑動的時候
//參數一:當前頁面的位置 參數二:偏移的百分比 參數三:偏移的距離
@Override
public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) {
int leftMargin = (int) (mPointWidth * (position + positionOffset));
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) viewRedPoint.getLayoutParams();
lp.leftMargin = leftMargin;
viewRedPoint.setLayoutParams(lp);
}
//當頁面被選擇
@Override
public void onPageSelected(int position) {
}
//當頁面狀態改變的時候
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持本站!
Android動畫之一:Drawable Animation
准備寫幾篇博客講解Android的動畫,首先介紹Android動畫的整體輪廓。 Android動畫主要分為三大類 View Animation Drawable An
小米手環免密碼支付怎麼設置 小米手環免密碼支付怎麼用
小米手環有一個免密碼支付功能,作為忠實米粉小米手環免密碼支付怎麼用都不會有點說不過去,那麼小米手環免密碼支付怎麼設置?小米手環免密碼支付怎麼用?下面為大家帶
Android 一個改善的okHttp封裝庫
一、概述之前寫了篇Android OkHttp完全解析 是時候來了解OkHttp了,其實主要是作為okhttp的普及文章,當然裡面也簡單封裝了工具類,沒想到
Android TextView 橫向滾動(跑馬燈效果)
Android TextView 中當文字比較多時希望它橫向滾動顯示,下面是一種親測可行的方法。效果圖:1.自定義TextView,重寫isFocused()方法返回tr