日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android banner指示器高度,Android 广告轮播 -ConvenientBanner 指示器大小、bottomMargin,leftMarfin的修改。...

發布時間:2024/3/13 Android 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android banner指示器高度,Android 广告轮播 -ConvenientBanner 指示器大小、bottomMargin,leftMarfin的修改。... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Android開發時,廣告輪播我的項目是使用的ConvenientBanner 來實現的,效果也很好。但是有一個很嚴格的設計師,需要完全按照她的設計來實現,突然發現ConvenientBanner 實現的指示器,不能修改bottomMargin,leftMargin,,而且也不能設置Indicator的大小。只能使用默認的。

實現原理:

自定義Indicator --->隱藏ConvenientBanner的默認Indicator-->通過ConvenientBanner的滾動監聽方法來聯動廣告圖片和Indicator

那么是不是我們需要更換框架,我是很不愿意的。然后查看ConvenientBanner 是不是有監聽滾動的方法,一查果然有。

setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

LogUtils.e("onPageSelected==" + position);

//在這里面設置選中的Indicator

indicatorView.setSelectIndex(position%banners.size());

}

@Override

public void onPageScrollStateChanged(int state) {

}

}

既然有這個方法,就容易實現需求,自定義一個IndicatorView,通過ConvenientBanner滾動監聽方法,不斷的設置選中的指示器和未選中的指示器。

IndicatorView method

該自定義的控件需要具有設置指示器個數和設置當前選中的指示器的方法

setIndicatorCount(int count)

setIndicatorSelectIndex(int index)

IndicatorView attires

同時,還需要擁有屬性如下

selectIndicatorResid——選中drawableResid

noSelectIndicatorResid——未選中drawableResid

indicatorWidhtDp——指示器寬,單位dp

indictorHeightDp——指示器高,單位dp

indicatorMarginLeft——指示器間隔,單位dp

在values/attrs下創建這些屬性。

IndicatorView

public class IndictorView extends LinearLayout {

private Context context;

private View view;

private LinearLayout layout;

//這些屬性全部變為自定義屬性

private int count = 0;//指示器的數量

private int selectIndicatorResid = R.drawable.ic_indicator_circle_s;//選中時候的圖片

private int noSelectIndicatorResid = R.drawable.ic_indicator_circle_n; //未選中的時候的圖片

private int indicatorWidhtDp;//指示器的寬

private int indicatorWidhtDp_default = 7; //指示器默認的寬 dp

private int indictorHeightDp;//指示器的高

private int indictorHeightDp_default = 7;//指示器默認的高 dp

private int indicatorMarginLeft; //指示器MarginLeft

private int indicatorMarginLeft_default = 3;

private int beforeSelectIndex=0;

public IndictorView(Context context) {

super(context, null);

LogUtils.e("count=" + count);

this.context = context;

}

public IndictorView(Context context, AttributeSet attrs) {

super(context, attrs, 0);

this.context = context;

TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.IndicatorView);

count = array.getInteger(count, R.styleable.IndicatorView_indicator_count);

selectIndicatorResid = array.getResourceId(R.styleable.IndicatorView_indicator_s_resid, R.drawable.ic_indicator_circle_s);

noSelectIndicatorResid = array.getResourceId(R.styleable.IndicatorView_indicator_n_resid, R.drawable.ic_indicator_circle_n);

indicatorWidhtDp = array.getDimensionPixelSize(R.styleable.IndicatorView_indicator_width, DisplayUtils.dp2px(context, inidicatorWidhtDp_default));

indictorHeightDp = array.getDimensionPixelSize(R.styleable.IndicatorView_indicator_width, DisplayUtils.dp2px(context, inidictorHeightDp_default));

indicatorMarginLeft = array.getDimensionPixelOffset(R.styleable.IndictorView_indicator_margin_left, DisplayUtils.dp2px(context, inidicatorMarginLeft_default));

array.recycle();

initViews();

}

public IndictorView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

this.context = context;

}

private void initViews() {

view = LayoutInflater.from(context).inflate(R.layout.widget_indicator, this);

layout = (LinearLayout) view.findViewById(R.id.widget_indicator_layout);

if (count != 0) {

setIndicatorsSize(count);

}

}

public void setIndicatorsSize(int count) {

for (int i = 0; i < count; i++) {

ImageView imageView = new ImageView(context);

imageView.setImageResource(selectIndicatorResid);

layout.addView(imageView);

LinearLayout.LayoutParams params = (LayoutParams) imageView.getLayoutParams();

params.height = indicatorWidhtDp;

params.width = indictorHeightDp;

//第一個不需要margin

if (i != 0) {

params.leftMargin = indicatorMarginLeft;

imageView.setImageResource(noSelectIndicatorResid);

}

imageView.setLayoutParams(params);

}

}

/**

* 設置選中的indicator

*

*@param index

*/

public void setSelectIndex(int index) {

ImageView imageViewbefore= (ImageView) layout.getChildAt(beforeSelectIndex);

ImageView imageViewCureent= (ImageView)layout.getChildAt(index);

if (null!=imageViewbefore)

imageViewbefore.setImageResource(noSelectIndicatorResid);

if (null!=imageViewCureent)

imageViewCureent.setImageResource(selectIndicatorResid);

beforeSelectIndex=index;

}

}

布局中的使用

android:layout_width="match_parent"

android:layout_height="@dimen/y300">

android:id="@+id/acty_main_cbanner"

android:layout_width="match_parent"

android:layout_height="match_parent" />

android:id="@+id/acty_main_indicator"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

app:indicator_height="@dimen/y14"

android:layout_centerHorizontal="true"

android:layout_marginBottom="@dimen/y20"

app:indicator_margin_left="@dimen/x7"

app:indicator_n_resid="@drawable/ic_indicator_circle_n"

app:indicator_s_resid="@drawable/ic_indicator_circle_s"

app:indicator_width="@dimen/y14" />

使用RelayoutLayout 來設置ConvenientBanner 和IndicatorView 對應的位置

這里x7、y14 這是因為屏幕適配時使用,大家可以使用對應的dp來設置。

Activity中ConvenientBanner 的設置

indicatorView.setIndicatorsSize(banners.size());

cBanner.setPages(new CBViewHolderCreator() {

@Override

public NetworkImageHolderView createHolder() {

return new NetworkImageHolderView();

}

}, banners)

.setPointViewVisible(false)//設置指示器是否可見

.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(int position) {

//dosomething

}

}).setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

LogUtils.e("onPageSelected==" + position);

//在這里面設置選中的Indicator

indictorView.setSelectIndex(position%banners.size());

}

@Override

public void onPageScrollStateChanged(int state) {

}

});//設置指示器的方向(左、中、右)

if (!cBanner.isTurning()) {

cBanner.startTurning(2000);

}

這樣我們就可以使用ConvenientBanner設定Indicator 的位置,大小,margin.

Demo github地址

總結

以上是生活随笔為你收集整理的android banner指示器高度,Android 广告轮播 -ConvenientBanner 指示器大小、bottomMargin,leftMarfin的修改。...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。