效果图如下:

demo2.gif

Demo2

1.仿京东首页顶部轮播图+搜索栏渐变

public class GradientScrollView extends ScrollView {

public interface ScrollViewListener {

void onScrollChanged(GradientScrollView scrollView, int x, int y,

int oldx, int oldy);

}

private ScrollViewListener scrollViewListener = null;

public GradientScrollView(Context context) {

super(context);

}

public GradientScrollView(Context context, AttributeSet attrs,

int defStyle) {

super(context, attrs, defStyle);

}

public GradientScrollView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public void setScrollViewListener(ScrollViewListener scrollViewListener) {

this.scrollViewListener = scrollViewListener;

}

@Override

public void scrollTo(int x, int y) {

super.scrollTo(x, y);

}

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

}

}

}

//滑动监听 控制状态栏变化

@Override

public void onScrollChanged(GradientScrollView scrollView, int x, int y, int oldx, int oldy) {

Drawable search_white = ContextCompat.getDrawable(this, R.mipmap.icon_search_white);

Drawable search_black = ContextCompat.getDrawable(this, R.mipmap.icon_search_black);

// 这一步必须要做,否则不会显示.

search_white.setBounds(0, 0, search_white.getMinimumWidth(), search_white.getMinimumHeight());

// 这一步必须要做,否则不会显示.

search_black.setBounds(0, 0, search_black.getMinimumWidth(), search_black.getMinimumHeight());

if (y <= 0) {

llTitle.setBackgroundColor(Color.argb((int) 0, 255, 255, 255));

rlLeft.setBackgroundResource(R.drawable.oval_shadow);

rlRight.setBackgroundResource(R.drawable.oval_shadow);

ivLeft.setImageResource(R.mipmap.icon_ewm);

ivRight.setImageResource(R.mipmap.icon_ewm);

tvSearch.setBackgroundResource(R.drawable.rec_shadow_r25);

tvSearch.setCompoundDrawables(search_white, null, null, null);

tvSearch.setCompoundDrawablePadding((int) getResources().getDimension(R.dimen.dimen_5));

tvSearch.setHintTextColor(color(R.color.white));

} else if (y > 0 && y <= height) {

float scale = (float) y / height;

float alpha = (255 * scale);

llTitle.setBackgroundColor(Color.argb((int) alpha, 255, 255, 255));

if (y > 0 && y <= height / 2) {

rlLeft.setBackgroundResource(R.drawable.oval_shadow);

rlRight.setBackgroundResource(R.drawable.oval_shadow);

ivLeft.setImageResource(R.mipmap.icon_ewm);

ivRight.setImageResource(R.mipmap.icon_ewm);

tvSearch.setBackgroundResource(R.drawable.rec_shadow_r25);

tvSearch.setCompoundDrawables(search_white, null, null, null);

tvSearch.setCompoundDrawablePadding((int) getResources().getDimension(R.dimen.dimen_5));

tvSearch.setHintTextColor(color(R.color.white));

} else {

rlLeft.setBackground(null);

rlRight.setBackground(null);

ivLeft.setImageResource(R.mipmap.icon_ewm_black);

ivRight.setImageResource(R.mipmap.icon_ewm_black);

tvSearch.setBackgroundResource(R.drawable.rec_gray_r25);

tvSearch.setCompoundDrawables(search_black, null, null, null);

tvSearch.setCompoundDrawablePadding((int) getResources().getDimension(R.dimen.dimen_5));

tvSearch.setHintTextColor(color(R.color.black));

}

} else {

llTitle.setBackgroundColor(Color.argb((int) 255, 255, 255, 255));

rlLeft.setBackground(null);

rlRight.setBackground(null);

ivLeft.setImageResource(R.mipmap.icon_ewm_black);

ivRight.setImageResource(R.mipmap.icon_ewm_black);

tvSearch.setBackgroundResource(R.drawable.rec_gray_r25);

tvSearch.setCompoundDrawables(search_black, null, null, null);

tvSearch.setCompoundDrawablePadding((int) getResources().getDimension(R.dimen.dimen_5));

tvSearch.setHintTextColor(color(R.color.black));

}

}

2.viewpager+自定义指示器

public class PageIndicator extends View {

private int count;

private int selection = 0;

private Paint mSelectedPaint;

private Paint mUnSelectedPaint;

private int selectedW;

private int unSelectedW;

private int height;

private int gapW;

private int unSelectedColor;

private int selectedColor;

public PageIndicator(Context context) {

this(context,null);

}

public PageIndicator(Context context, @Nullable AttributeSet attrs) {

this(context, attrs,0);

}

public PageIndicator(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.PageIndicator);

unSelectedColor = ta.getColor(R.styleable.PageIndicator_unselected_color, ContextCompat.getColor(context,R.color.grayCC));

selectedColor = ta.getColor(R.styleable.PageIndicator_selected_color, ContextCompat.getColor(context,R.color.black));

count=ta.getInt(R.styleable.PageIndicator_count,3);

ta.recycle();

init(context);

}

private void init(Context context){

mSelectedPaint = new Paint();

mSelectedPaint.setColor(selectedColor);

mSelectedPaint.setAntiAlias(true);

mSelectedPaint.setStyle(Paint.Style.FILL);

mUnSelectedPaint = new Paint();

mUnSelectedPaint.setColor(unSelectedColor);

mUnSelectedPaint.setAntiAlias(true);

mUnSelectedPaint.setStyle(Paint.Style.FILL);

selectedW = PhoneUtil.dp2px(context,20f);

unSelectedW = PhoneUtil.dp2px(context,10f);

height = PhoneUtil.dp2px(context,2f);

gapW = PhoneUtil.dp2px(context,5f);

}

public void setCount(int count){

this.count = count;

requestLayout();

invalidate();

}

public void setSelection(int position){

selection = position;

invalidate();

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int width = (count - 1)*(unSelectedW + gapW) + selectedW;

setMeasuredDimension(width,height);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

boolean isHasSelect = false;

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

if (i == selection){

isHasSelect = true;

RectF rectF = new RectF(i*(unSelectedW + gapW),0,i*(unSelectedW + gapW) + selectedW,height);

canvas.drawRoundRect(rectF,200,200,mSelectedPaint);

}else {

if (isHasSelect){

RectF rectF = new RectF((i-1)*(unSelectedW + gapW)+(selectedW + gapW),0,(i-1)*(unSelectedW + gapW)+(selectedW + gapW) + unSelectedW,height);

canvas.drawRoundRect(rectF,200,200,mUnSelectedPaint);

}else {

RectF rectF = new RectF(i*(unSelectedW + gapW),0,i*(unSelectedW + gapW) + unSelectedW,height);

canvas.drawRoundRect(rectF,200,200,mUnSelectedPaint);

}

}

}

}

}

3.viewpager3D效果

private PagerAdapter pagerAdapter = new PagerAdapter() {

@Override

public int getCount() {

return imgIds.length;

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView((View) object);

}

@Override

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

ClipView clipView;

if (imageViewList.containsKey(position)) {

clipView = imageViewList.get(position);

} else {

clipView = (ClipView) View.inflate(mActivity, R.layout.item_image, null);

ImageView imageView = (ImageView) clipView.findViewById(R.id.iv_img);

TextView tvTitle = clipView.findViewById(R.id.tv_title);

imageView.setImageResource(imgIds[position]);

imageViewList.put(position, clipView);

}

container.addView(clipView);

clipView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

ToastUtil.normal("点击了" + (position + 1));

fvpPagers.setCurrentItem(position, true);

}

});

return clipView;

}

};

4.recyclerview瀑布流

android:overScrollMode="never"

android:layout_marginTop="@dimen/dimen_10"

android:layout_marginLeft="@dimen/dimen_10"

android:id="@+id/demo_list"

app:spanCount="2"

app:layoutManager="android.support.v7.widget.StaggeredGridLayoutManager"

tools:listitem="@layout/item_demo2_list"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

@Override

public void setData(List data) {

super.setData(data);

heightList = new ArrayList<>();

for (int i = 0; i < data.size(); i++) {

int height = new Random().nextInt(300) + 650;//随机数控制高度

heightList.add(height);

}

}

@Override

protected void fillData(BGAViewHolderHelper helper, int position, String model) {

CardView layout=helper.getView(R.id.layout);

ViewGroup.LayoutParams layoutParams=layout.getLayoutParams();

layoutParams.height=heightList.get(position);

layout.setLayoutParams(layoutParams);

}

将持续更新.. 不喜勿喷,仅个人分享,希望能帮助到你

Android瀑布流仿京东,(二) 仿京东顶部伸缩渐变丶自定义viewpager指示器丶viewpager3D回廊丶recyclerview瀑布流...相关推荐

  1. android 自定义viewpager指示器,Android自定义View Flyme6的Viewpager指示器

    最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下: Gradle allprojects { repo ...

  2. 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题

    解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题 参考文章: (1)解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题 (2)https://www.cn ...

  3. Android仿淘宝、京东Banner滑动查看图文详情

    文章目录 写在前面 效果图 原理分析 核心代码 源码地址 写在前面 本文基于 ViewPager2 实现的 Banner 效果,进而实现了仿淘宝.京东Banner滑动至最后一页时继续滑动来查看图文详情 ...

  4. Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View...

    Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...

  5. Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View

    Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...

  6. 微信小程序开源源码,仿淘宝、京东、今日头条等

    wx-gesture-lock  微信小程序的手势密码 WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小说搜索 sh ...

  7. Android 天气APP(十三)仿微信弹窗(右上角加号点击弹窗效果)、自定义背景图片、UI优化调整

    上一篇:Android 天气APP(十二)空气质量.UI优化调整 天气预报详情,逐小时预报详情 新版------------------- 一.适配器点击监听 二.页面实现 三.天气预报详情弹窗 四. ...

  8. Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命

    Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/li ...

  9. 仿百度壁纸客户端(二)——主页自定义ViewPager广告定时轮播图

    仿百度壁纸客户端(二)--主页自定义ViewPager广告定时轮播图 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度壁纸客户端( ...

最新文章

  1. 依赖包的添加和自动检测机制
  2. Java就业前景怎么样?值得学吗?
  3. 初始化懒惰关系以及何时使用它们的5种方法
  4. Linux用ICMP协议实现简单Ping网络监测功能
  5. (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍
  6. 【论文笔记】基于2-channel network的图片相似度判别-CVPR 2015
  7. 01-unity下载与安装
  8. java saxreader,java – 如何使用dom4j SAXReader脱机?
  9. html 百分比饼状图,highcharts饼状图百分比显示的数据和写的不同
  10. java 判断今天_java判断日期是否是今天
  11. 页面图片 “懒加载”
  12. APP项目的开发流程
  13. Antd给表格一个斜线分隔(通过css改变)
  14. 掌握赚钱最快的方法 其实赚钱很有意思 你可以什么都不会
  15. 收藏一个快要消亡的技术古董
  16. 在手机安装 Kali Linux
  17. 不给代码写文档,让代码文档化
  18. nginx安装配置(图文教程)
  19. 【fake location破解版】加强版随风2.0定位助手使用方法
  20. 那些支持图片外链的免费相册

热门文章

  1. 人像精修除雀斑美女,华丽大转身哈哈
  2. linux键盘鼠标不能使用的办法
  3. 互联网公司的名称来由,知道真相的我眼泪笑出来!
  4. 如何用手机计算机弹出音乐,如何使用手机或计算机剪切和拾取音乐?
  5. 测试深度学习环境(GPU是否可调用)
  6. 如何高质量的度过在社科院与杜兰大学金融管理硕士项目18个月的时光
  7. 研发费用加计扣除怎么申报?
  8. React路由报错You should not use Switch outside a Router
  9. linux sh命令详解
  10. 学习 Roblox 第一天-笔记