banner设圆角_Xbanner圆角展示轮播图

展示效果如下:

fc29a9e2abc4

展示的样式两边留白圆角展示

fc29a9e2abc4

滑动的样式展示

如果符合你想要设置的效果那继续看后续的具体代码增加:

//圆角方法

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

public void setClipViewCornerRadius(View view, final int radius) {

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

//不支持5.0版本以下的系统

//5.0以下,值设置边距

view.setPadding(40, 0, 40, 0);

return;

}

if (view == null) return;

if (radius <= 0) {

return;

}

view.setOutlineProvider(new ViewOutlineProvider() {

@Override

public void getOutline(View view, Outline outline) {

// outline.setRoundRect(20, 20, view.getWidth()-40, view.getHeight()-40, radius);

outline.setRoundRect(40, 0, view.getWidth() - 40, view.getHeight(), radius);

// Rect rect = new Rect();

// view.getGlobalVisibleRect(rect);

// int leftMargin = 40;

// int topMargin = 40;

// Rect selfRect = new Rect(leftMargin, topMargin,

// rect.right - rect.left - leftMargin, rect.bottom - rect.top - topMargin);

// outline.setRoundRect(selfRect, 30);

}

});

view.setClipToOutline(true);

}

在instantiateItem返回view之前设置圆角

@NonNull

@Override

public Object instantiateItem(@NonNull ViewGroup container, final int position) {

if (getRealCount() == 0) {

return null;

}

final int realPosition = position % getRealCount();

View view;

if (mLessViews == null) {

view = mViews.get(realPosition);

} else {

view = mLessViews.get(position % mLessViews.size());

}

if (container.equals(view.getParent())) {

container.removeView(view);

}

if (mOnItemClickListener != null && mDatas.size() != 0) {

view.setOnClickListener(new OnDoubleClickListener() {

@Override

public void onNoDoubleClick(View v) {

mOnItemClickListener.onItemClick(XbannerRoundImg.this, mDatas.get(realPosition), v, realPosition);

}

});

}

if (null != mAdapter && mDatas.size() != 0) {

mAdapter.loadBanner(XbannerRoundImg.this, mDatas.get(realPosition), view, realPosition);

}

ViewParent parent = view.getParent();

if (parent != null) {

((ViewGroup) parent).removeView(view);

}

//在返回view的时候设置圆角

setClipViewCornerRadius(view, 30);

container.addView(view);

return view;

}

其余设置完全和Xbanner一样

下面是完整的代码:

package com.stx.xhb.xbanner;

import android.annotation.TargetApi;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Color;

import android.graphics.Outline;

import android.graphics.drawable.ColorDrawable;

import android.graphics.drawable.Drawable;

import android.os.Build;

import android.text.TextUtils;

import android.util.AttributeSet;

import android.util.TypedValue;

import android.view.Gravity;

import android.view.MotionEvent;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewOutlineProvider;

import android.view.ViewParent;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.TextView;

import androidx.annotation.Dimension;

import androidx.annotation.DrawableRes;

import androidx.annotation.IntDef;

import androidx.annotation.LayoutRes;

import androidx.annotation.NonNull;

import androidx.viewpager.widget.PagerAdapter;

import androidx.viewpager.widget.ViewPager;

import com.stx.xhb.xbanner.entity.SimpleBannerInfo;

import com.stx.xhb.xbanner.transformers.BasePageTransformer;

import com.stx.xhb.xbanner.transformers.Transformer;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.ref.WeakReference;

import java.util.ArrayList;

import java.util.List;

/**

* @packageName:com.stx.xhb.xbanner

* @className: XbannerRoundImg

* @description:新增设置圆角图

* @author: dingchao

* @time: 2020-06-28 09:41

*/

public class XbannerRoundImg extends RelativeLayout implements XBannerViewPager.AutoPlayDelegate, ViewPager.OnPageChangeListener {

private static final int RMP = LayoutParams.MATCH_PARENT;

private static final int RWC = LayoutParams.WRAP_CONTENT;

private static final int LWC = LinearLayout.LayoutParams.WRAP_CONTENT;

private static final int VEL_THRESHOLD = 400;

public static final int NO_PLACE_HOLDER = -1;

private int mPageScrollPosition;

private float mPageScrollPositionOffset;

private ViewPager.OnPageChangeListener mOnPageChangeListener;

private OnItemClickListener mOnItemClickListener;

/**

* 指示点位置

*/

public static final int LEFT = 0;

public static final int CENTER = 1;

public static final int RIGHT = 2;

/**

* mViewPagerClipChildren

*/

private boolean mViewPagerClipChildren;

@IntDef({LEFT, CENTER, RIGHT})

@Retention(RetentionPolicy.SOURCE)

public @interface INDICATOR_GRAVITY {

}

private AutoSwitchTask mAutoSwitchTask;

private LinearLayout mPointRealContainerLl;

private XBannerViewPager mViewPager;

/**

* 指示点左右内间距

*/

private int mPointLeftRightPading;

/**

* 指示点上下内间距

*/

private int mPointTopBottomPading;

/**

* 指示点容器左右内间距

*/

private int mPointContainerLeftRightPadding;

/**

* 资源集合

*/

private List> mDatas;

/**

* 处理少于三页时的无限轮播

*/

private List mLessViews;

/**

* 视图集合

*/

private List mViews;

/**

* 是否只有一张图片

*/

private boolean mIsOneImg = false;

/**

* 是否开启自动轮播

*/

private boolean mIsAutoPlay = true;

/**

* 自动播放时间

*/

private int mAutoPalyTime = 5000;

/**

* 是否允许用户滑动

*/

private boolean mIsAllowUserScroll = true;

/**

* viewpager从最后一张到第一张的动画效果

*/

private int mSlideScrollMode = OVER_SCROLL_ALWAYS;

/**

* 指示点位置

*/

private int mPointPosition = CENTER;

/**

* 正常状态下的指示点

*/

private @DrawableRes

int mPointNoraml;

/**

* 选中状态下的指示点

*/

private @DrawableRes

int mPointSelected;

/**

* 指示容器背景

*/

private Drawable mPointContainerBackgroundDrawable;

/**

* 指示容器布局规则

*/

private LayoutParams mPointRealContainerLp;

/**

* 提示语

*/

private TextView mTipTv;

/**

* 提示语字体颜色

*/

private int mTipTextColor;

/**

* 指示点是否可见

*/

private boolean mPointsIsVisible = true;

/**

* 提示语字体大小

*/

private int mTipTextSize;

/**

* 是否展示提示语

*/

private boolean mIsShowTips;

/**

* 提示文案数据

*/

private List mTipData;

/**

* 指示器容器位置

*/

public static final int TOP = 10;

public static final int BOTTOM = 12;

@IntDef({TOP, BOTTOM})

@Retention(RetentionPolicy.SOURCE)

public @interface INDICATOR_POSITION {

}

private int mPointContainerPosition = BOTTOM;

private XBannerAdapter mAdapter;

/*指示器容器*/

private LayoutParams mPointContainerLp;

/*是否是数字指示器*/

private boolean mIsNumberIndicator = false;

private TextView mNumberIndicatorTv;

/*数字指示器背景*/

private Drawable mNumberIndicatorBackground;

/*只有一张图片时是否显示指示点*/

private boolean mIsShowIndicatorOnlyOne = false;

/*默认图片切换速度为1s*/

private int mPageChangeDuration = 1000;

/*是否支持提示文字跑马灯效果*/

private boolean mIsTipsMarquee = false;

/*是否是第一次不可见*/

private boolean mIsFirstInvisible = true;

/*非自动轮播状态下是否可以循环切换*/

private boolean mIsHandLoop = false;

private Transformer mTransformer;

/*轮播框架占位图资源Id*/

private int mPlaceholderDrawableResId = -1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值