仿淘宝详情页 直接上代码

package com.example.liketitledemo;import android.content.Context;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.WindowManager;
import android.widget.ScrollView;import java.util.ArrayList;public class IdeaScrollView extends ScrollView {private final Point point;private IdeaViewPager viewPager;private int position = 0;ArrayList<Integer> arrayDistance = new ArrayList<>();private int headerHeight;public IdeaScrollView(Context context) {this(context,null,0);}public IdeaScrollView(Context context, AttributeSet attrs) {this(context, attrs,0);}public IdeaScrollView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);point = new Point();windowManager.getDefaultDisplay().getSize(point);}@Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {super.onScrollChanged(l, t, oldl, oldt);if (viewPager != null && t != oldt) {viewPager.setTranslationY(t/2);}if(viewPager!=null&&t<=point.x-headerHeight&&getOnScrollChangedColorListener()!=null){getOnScrollChangedColorListener().onChanged(Math.abs(t)/Float.valueOf(point.x-headerHeight));if(t<=(point.x-headerHeight)/2){getOnScrollChangedColorListener().onChangedFirstColor(t/(point.x-headerHeight)/2);}else{getOnScrollChangedColorListener().onChangedSecondColor((t-(point.x-headerHeight)/2)/(point.x-headerHeight)/2);}}int currentPosition = getCurrentPosition(t,arrayDistance);if(currentPosition!=position&&getOnSelectedIndicateChangedListener()!=null){getOnSelectedIndicateChangedListener().onSelectedChanged(currentPosition);}this.position = currentPosition;}private int getCurrentPosition(int t, ArrayList<Integer> arrayDistance) {int index = 0;for (int i=0;i<arrayDistance.size();i++){if(i==arrayDistance.size()-1){index = i;}else {if(t>=arrayDistance.get(i)&&t<arrayDistance.get(i+1)){index = i;break;}}}return index;}private void scrollToPosition() {scrollToPosition(position);}private void scrollToPosition(int position){scrollTo(0,arrayDistance.get(position));}public void setViewPager(IdeaViewPager viewPager,int headerHeight){this.viewPager = viewPager;this.headerHeight = headerHeight;}public interface OnScrollChangedColorListener{void onChanged(float percentage);void onChangedFirstColor(float percentage);void onChangedSecondColor(float percentage);}public interface OnSelectedIndicateChangedListener{void onSelectedChanged(int position);}private OnSelectedIndicateChangedListener onSelectedIndicateChangedListener;private OnScrollChangedColorListener onScrollChangedColorListener;public OnScrollChangedColorListener getOnScrollChangedColorListener() {return onScrollChangedColorListener;}public void setOnScrollChangedColorListener(OnScrollChangedColorListener onScrollChangedColorListener) {this.onScrollChangedColorListener = onScrollChangedColorListener;}public IdeaViewPager getViewPager() {return viewPager;}public int getPosition() {return position;}public void setPosition(int position) {this.position = position;scrollToPosition();}public ArrayList<Integer> getArrayDistance() {return arrayDistance;}public void setArrayDistance(ArrayList<Integer> arrayDistance) {this.arrayDistance = arrayDistance;}public OnSelectedIndicateChangedListener getOnSelectedIndicateChangedListener() {return onSelectedIndicateChangedListener;}public void setOnSelectedIndicateChangedListener(OnSelectedIndicateChangedListener onSelectedIndicateChangedListener) {this.onSelectedIndicateChangedListener = onSelectedIndicateChangedListener;}
}
package com.example.liketitledemo;import android.content.Context;
import android.graphics.Point;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.WindowManager;public class IdeaViewPager extends ViewPager {private Point point;public IdeaViewPager(Context context) {this(context,null);}public IdeaViewPager(Context context, AttributeSet attrs) {super(context, attrs);WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);point = new Point();windowManager.getDefaultDisplay().getSize(point);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);setMeasuredDimension(point.x,point.x);}
}
package com.example.liketitledemo;import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.support.v4.view.ViewCompat;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;public class StatusBarCompat {private static final int COLOR_TRANSLUCENT = Color.parseColor("#00000000");public static final int DEFAULT_COLOR_ALPHA = 112;/*** set statusBarColor* @param statusColor color* @param alpha 0 - 255*/public static void setStatusBarColor(Activity activity, int statusColor, int alpha) {setStatusBarColor(activity, calculateStatusBarColor(statusColor, alpha));}public static void setStatusBarColor(Activity activity, int statusColor) {Window window = activity.getWindow();ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//First translucent status bar.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//After LOLLIPOP not translucent status barwindow.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//Then call setStatusBarColor.window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(statusColor);//set child View not fill the system windowView mChildView = mContentView.getChildAt(0);if (mChildView != null) {ViewCompat.setFitsSystemWindows(mChildView, true);}} else {ViewGroup mDecorView = (ViewGroup) window.getDecorView();if (mDecorView.getTag() != null && mDecorView.getTag() instanceof Boolean && (Boolean)mDecorView.getTag()) {//if has add fake status bar viewView mStatusBarView = mDecorView.getChildAt(0);if (mStatusBarView != null) {mStatusBarView.setBackgroundColor(statusColor);}} else {int statusBarHeight = getStatusBarHeight(activity);//add marginView mContentChild = mContentView.getChildAt(0);if (mContentChild != null) {ViewCompat.setFitsSystemWindows(mContentChild, false);FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mContentChild.getLayoutParams();lp.topMargin += statusBarHeight;mContentChild.setLayoutParams(lp);}//add fake status bar viewView mStatusBarView = new View(activity);FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);layoutParams.gravity = Gravity.TOP;mStatusBarView.setLayoutParams(layoutParams);mStatusBarView.setBackgroundColor(statusColor);mDecorView.addView(mStatusBarView, 0);mDecorView.setTag(true);}}}}public static void translucentStatusBar(Activity activity) {translucentStatusBar(activity, false);}/*** change to full screen mode* @param hideStatusBarBackground hide status bar alpha Background when SDK > 21, true if hide it*/public static void translucentStatusBar(Activity activity, boolean hideStatusBarBackground) {Window window = activity.getWindow();ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);//set child View not fill the system windowView mChildView = mContentView.getChildAt(0);if (mChildView != null) {ViewCompat.setFitsSystemWindows(mChildView, false);}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {int statusBarHeight = getStatusBarHeight(activity);//First translucent status bar.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//After LOLLIPOP just set LayoutParams.window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);if (hideStatusBarBackground) {window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.setStatusBarColor(COLOR_TRANSLUCENT);} else {window.setStatusBarColor(calculateStatusBarColor(COLOR_TRANSLUCENT, DEFAULT_COLOR_ALPHA));}//must call requestApplyInsets, otherwise it will have space in screen bottomif (mChildView != null) {ViewCompat.requestApplyInsets(mChildView);}} else {ViewGroup mDecorView = (ViewGroup) window.getDecorView();if (mDecorView.getTag() != null && mDecorView.getTag() instanceof Boolean && (Boolean)mDecorView.getTag()) {mChildView = mDecorView.getChildAt(0);//remove fake status bar view.mContentView.removeView(mChildView);mChildView = mContentView.getChildAt(0);if (mChildView != null) {FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mChildView.getLayoutParams();//cancel the margin topif (lp != null && lp.topMargin >= statusBarHeight) {lp.topMargin -= statusBarHeight;mChildView.setLayoutParams(lp);}}mDecorView.setTag(false);}}}}//Get status bar heightpublic static int getStatusBarHeight(Context context) {int result = 0;int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");if (resId > 0) {result = context.getResources().getDimensionPixelOffset(resId);}return result;}//Get alpha colorprivate static int calculateStatusBarColor(int color, int alpha) {float a = 1 - alpha / 255f;int red = color >> 16 & 0xff;int green = color >> 8 & 0xff;int blue = color & 0xff;red = (int) (red * a + 0.5);green = (int) (green * a + 0.5);blue = (int) (blue * a + 0.5);return 0xff << 24 | red << 16 | green << 8 | blue;}
}
package com.example.liketitledemo;import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {private IdeaViewPager viewPager;private IdeaScrollView ideaScrollView;private TextView text;private LinearLayout header;private RadioGroup radioGroup;private LinearLayout headerParent;private ImageView icon;private View layer;private float currentPercentage = 0;private RadioGroup.OnCheckedChangeListener radioGroupListener =new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {for(int i=0;i<radioGroup.getChildCount();i++){RadioButton radioButton = (RadioButton) radioGroup.getChildAt(i);radioButton.setTextColor(radioButton.isChecked()?getRadioCheckedAlphaColor(currentPercentage):getRadioAlphaColor(currentPercentage));if(radioButton.isChecked()&&isNeedScrollTo){ideaScrollView.setPosition(i);}}}};private boolean isNeedScrollTo = true;@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);StatusBarCompat.translucentStatusBar(this);//header = (LinearLayout)findViewById(R.id.header);headerParent = (LinearLayout)findViewById(R.id.headerParent);//icon = (ImageView)findViewById(R.id.icon);radioGroup = (RadioGroup)findViewById(R.id.radioGroup);ideaScrollView = (IdeaScrollView)findViewById(R.id.ideaScrollView);viewPager = (IdeaViewPager)findViewById(R.id.viewPager);layer = findViewById(R.id.layer);Rect rectangle= new Rect();getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);ideaScrollView.setViewPager(viewPager,getMeasureHeight(headerParent)-rectangle.top);//icon.setImageAlpha(0);radioGroup.setAlpha(0);radioGroup.check(radioGroup.getChildAt(0).getId());View one = findViewById(R.id.one);View two = findViewById(R.id.two);View four = findViewById(R.id.four);View three = findViewById(R.id.three);ArrayList<Integer> araryDistance = new ArrayList<>();araryDistance.add(0);araryDistance.add(getMeasureHeight(one)-getMeasureHeight(headerParent));araryDistance.add(getMeasureHeight(one)+getMeasureHeight(two)-getMeasureHeight(headerParent));araryDistance.add(getMeasureHeight(one)+getMeasureHeight(two)+getMeasureHeight(three)-getMeasureHeight(headerParent));ideaScrollView.setArrayDistance(araryDistance);ideaScrollView.setOnScrollChangedColorListener(new IdeaScrollView.OnScrollChangedColorListener() {@Overridepublic void onChanged(float percentage) {int color = getAlphaColor(percentage>0.9f?1.0f:percentage);//header.setBackgroundDrawable(new ColorDrawable(color));radioGroup.setBackgroundDrawable(new ColorDrawable(color));//icon.setImageAlpha((int) ((percentage>0.9f?1.0f:percentage)*255));radioGroup.setAlpha((percentage>0.9f?1.0f:percentage)*255);setRadioButtonTextColor(percentage);}@Overridepublic void onChangedFirstColor(float percentage) {}@Overridepublic void onChangedSecondColor(float percentage) {}});ideaScrollView.setOnSelectedIndicateChangedListener(new IdeaScrollView.OnSelectedIndicateChangedListener() {@Overridepublic void onSelectedChanged(int position) {isNeedScrollTo = false;radioGroup.check(radioGroup.getChildAt(position).getId());isNeedScrollTo = true;}});radioGroup.setOnCheckedChangeListener(radioGroupListener);}public void setRadioButtonTextColor(float percentage){if(Math.abs(percentage-currentPercentage)>=0.1f){for(int i=0;i<radioGroup.getChildCount();i++){RadioButton radioButton = (RadioButton) radioGroup.getChildAt(i);radioButton.setTextColor(radioButton.isChecked()?getRadioCheckedAlphaColor(percentage):getRadioAlphaColor(percentage));}this.currentPercentage = percentage;}}public int getMeasureHeight(View view){int width = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);int height = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);view.measure(width, height);return view.getMeasuredHeight();}public int getAlphaColor(float f){return Color.argb((int) (f*255),0x09,0xc1,0xf4);}public int getLayerAlphaColor(float f){return Color.argb((int) (f*255),0x09,0xc1,0xf4);}public int getRadioCheckedAlphaColor(float f){return Color.argb((int) (f*255),0x44,0x44,0x44);}public int getRadioAlphaColor(float f){return Color.argb((int) (f*255),0xFF,0xFF,0xFF);}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.example.liketitledemo.IdeaScrollViewandroid:id="@+id/ideaScrollView"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:id="@+id/one"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><com.example.liketitledemo.IdeaViewPagerandroid:id="@+id/viewPager"android:layout_width="match_parent"android:background="@drawable/aa"android:layout_height="wrap_content"/><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/one"/></LinearLayout><LinearLayoutandroid:id="@+id/two"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/two"/><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/three"/></LinearLayout><ImageViewandroid:id="@+id/three"android:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/four"/><LinearLayoutandroid:id="@+id/four"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/five"/><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/six"/><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/six"/><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/six"/></LinearLayout></LinearLayout></com.example.liketitledemo.IdeaScrollView><LinearLayoutandroid:id="@+id/headerParent"android:layout_marginTop="20dp"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><RadioGroupandroid:id="@+id/radioGroup"android:background="#00FFFFFF"android:layout_width="match_parent"android:orientation="horizontal"android:layout_height="48dp"><RadioButtonandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:button="@null"android:textColor="#00000000"android:gravity="center"android:text="宝贝"/><RadioButtonandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:button="@null"android:textColor="#00000000"android:gravity="center"android:text="评价"/><RadioButtonandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:button="@null"android:textColor="#00000000"android:gravity="center"android:text="详情"/><RadioButtonandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:button="@null"android:textColor="#00000000"android:text="推荐"/></RadioGroup><Viewandroid:id="@+id/layer"android:layout_width="match_parent"android:background="#00FFFFFF"android:layout_height="48dp"/></FrameLayout></LinearLayout></FrameLayout>

仿淘宝详情页 直接上代码相关推荐

  1. 自定义View之仿淘宝详情页

    自定义View之仿淘宝详情页 转载请标明出处: http://blog.csdn.net/lisdye2/article/details/52353071 本文出自:[Alex_MaHao的博客] 项 ...

  2. uniapp仿淘宝详情页页面滑动tab切换

    uniapp仿淘宝详情页页面滑动tab切换 建立util文件夹放一个Tool.js: export default{getRect(selector){return new Promise((reso ...

  3. 仿淘宝详情页的商品详情

    先上效果图 效果就是上面图片的效果 接下来看看如何实现 首先我们来看下布局文件 <LinearLayoutandroid:id="@+id/header"android:la ...

  4. Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能

    需要做一个仿淘宝客户端ViewPager滑动到最后一页,再拖动的时候跳到详情的功能,刚开始我也迷糊了,通过查阅相关资料发现有好多种实现方法,下面小编给大家分享实例代码,感兴趣的朋友一起看看吧 需要做一 ...

  5. 用原生js实现淘宝详情页图片放大镜效果

    这个功能是我在模仿淘宝详情页的时候做出来的,最初版本对于非1:1比例的图片没有做处理,后续对程序进行了完善和逻辑上修改,形成了当前的程序. 废话不多说,直接进入正题了,先上个效果图 先放上这段功能的h ...

  6. Android模仿淘宝详情页界面

    话不多说-先上效果图: 图1中主要需要实现的效果: 1.轮播图 2.顶部导航栏的渐变 3.顶部导航栏随着滑动的位置选择对应的值以及点击滑动到对应位置 Android模仿淘宝详情页界面文件:url80. ...

  7. 自定义LinearLayout实现淘宝详情页

    1.简单说明 淘宝详情页就不用我一一介绍了,昨天逛淘宝看到这个效果时,让我想起了去年刚学习Android只会使用现成的时候,当时在网上找了一个这种效果的使用了,并不懂怎么实现的.现在就看到一种效果就想 ...

  8. UNIAPP----仿淘宝详情页滚动

    淘宝详情页,滚动时,上面的选项卡也随之改变,本代码为测试版,我自己测可用,全部复制可运行参考. 核心思想:监听屏幕滚动距离,动态修改上面选中样式,也就是上面的字体会被选中. 点击上面字体获取下标,跳转 ...

  9. 淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式

    对于复杂页面,为了将用户关注的内容尽可能快渲染出来,至少有两种方式: 一.Facebook 的 BigPipe 方式.先输出页面整体布局,然后逐步输出脚本块,一边输出一边执行,将内容渲染回页面布局中. ...

最新文章

  1. Delphi 7 在程序中直接执行SQL脚本文件
  2. 基于遗传算法实现自动组卷
  3. Android使用GestureDetector实现手势滑动效果
  4. shell重启jar包
  5. java generic faq_【公告】我的世界中国版JAVA不限号测试指引(FAQ)
  6. 树莓派百度语音识别+图灵机器人对话聊天机器人
  7. 实现一个基于主存的虚拟块设备驱动程序_存储器的层次结构:寄存器、高速缓存、主存、本地磁盘...
  8. .net core @Html 自定义属性中包含特殊符号解决
  9. python后端和爬虫_【后端开发】python爬虫难学吗
  10. QQ能上 网页却打不开
  11. 东芝移动硬盘拆解图_拆解报告:小米USB 3.0分线器XMFXQ01QM
  12. javacv教程文档手册开发指南汇总篇
  13. html英雄联盟网页,Html+Css+JQuery实现简易英雄联盟官网
  14. CATIA二次开发—视图及视点
  15. 程序猿生存指南-57 故友来京
  16. chrome浏览器启动页被篡改为360导航
  17. 武汉坚守第二十二天——谣言与辟谣与慌乱
  18. CUDA C/C++ 流和并发
  19. 测绘程序设计——基础篇(1)C#编写方位角计算程序篇1——用户界面的构造
  20. 新概念2 课文和单词(10)

热门文章

  1. 【STB】未来机顶盒的发展方向
  2. matlab在stem的运用
  3. 【Linux】Linux目录
  4. 场内场外交易成本_开放式基金的场内交易和场外交易有什么区别?
  5. 【本人秃顶程序员】作为字节跳动的研发面试官,有些话我不得不说!
  6. MySQL SHOW INDEX 的语法解析
  7. 创造力国际农民丰收节贸易会-万祥军:荒漠土地以色列淘金
  8. MCS-51单片机存储器结构-特殊功能寄存器 :堆栈指针SP(Stack Pointer)
  9. springboot选择题、判断题
  10. java构造方法时对象初始化,实例化,参数赋值