话不多说---先上效果图:

图1 商品详情页

图2 加入购物车点击事件

需求分析:

图1中主要需要实现的效果:

1.轮播图

2.顶部导航栏的渐变

3.顶部导航栏随着滑动的位置选择对应的值以及点击滑动到对应位置

图2中主要需要实现的效果:

1.界面从底部出场的效果

2.参数选择的瀑布流式效果

技术分析:

图1:

1.轮播图,可以采用自定义(ViewPager的使用),也可以用直接用第三方库。这里我采用的是

https://github.com/youth5201314/banner  (这个是在GitHub上,搜banner,排第一的。选这个跟我自己买东西的心态一样,不知道哪个好,买贵的就对了,哈哈哈)

2.顶部导航栏的渐变,这个效果,我是通过滑动监听,在自己划分的几个区域内,设置不同的透明度。“生硬”的实现了渐变的效果,为了不那么生硬透明度基本等距变化。(如果你有更好的实现方法,欢迎骚扰~)

3.第三点,也是通过对滑动监听实现的。

图2:

1.底部出场,只需要设置一个布局参数属性就行 Gravity.BOTTOM ,动画的话就用

overridePendingTransition(R.anim.bottom_static, R.anim.bottom_out);

2.第二个效果,可以使用recyclerview嵌套recyclerview实现;也可以用ExpandableListView实现;也可以用FlowLayout实现。因为时间比较急,所以用了FlowLayout简单的实现了上述效果。

具体实现:

图1:

关键地方都有注解,认真康康,如果有疑惑的,随时联系我。(取名这块,我的可能有点乱,欢迎指导~)

布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/grey_200"><androidx.core.widget.NestedScrollViewandroid:id="@+id/cd_sv"android:layout_width="match_parent"android:layout_height="wrap_content"android:fillViewport="true"android:scrollbarSize="0dp"android:scrollbars="vertical"><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="600dp"><com.youth.banner.Bannerandroid:id="@+id/cd_banner"android:layout_width="match_parent"android:layout_height="450dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:is_auto_loop="false"app:is_infinite_loop="false"/><TextViewandroid:id="@+id/cd_tv"android:layout_width="wrap_content"android:layout_height="70dp"android:background="@color/grey_000"android:text="    A21夏季2020男装多口袋工装裤 男士九分裤束脚休闲裤潮牌男裤子"android:textSize="17sp"android:textStyle="bold"android:gravity="center_vertical"android:textColor="@color/grey_900"android:drawableStart="@drawable/ic_share"android:padding="8dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/cd_banner" /><TextViewandroid:id="@+id/cd_params"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="参数选择"android:layout_marginStart="5dp"app:layout_constraintStart_toStartOf="@+id/cd_tv"app:layout_constraintTop_toBottomOf="@+id/cd_tv" /><TextViewandroid:id="@+id/cd_tv_param"android:layout_width="match_parent"android:layout_height="30dp"android:background="@color/grey_000"android:text="选择码数,颜色分类"android:gravity="center_vertical"app:layout_constraintStart_toStartOf="@+id/cd_params"app:layout_constraintTop_toBottomOf="@+id/cd_params" /><TextViewandroid:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:layout_marginStart="5dp"android:text="宝贝评价"app:layout_constraintStart_toStartOf="@+id/cd_tv_param"app:layout_constraintTop_toBottomOf="@+id/cd_tv_param" /><TextViewandroid:id="@+id/tv_comment_more"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="查看全部     >   "android:textColor="@color/colorAccent"app:layout_constraintEnd_toEndOf="@+id/cd_tv_param"app:layout_constraintTop_toBottomOf="@+id/cd_tv_param" /><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/cd_rcv"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_constraintStart_toStartOf="@+id/cd_tv_param"app:layout_constraintTop_toBottomOf="@+id/tv1" /><TextViewandroid:id="@+id/tv2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:layout_marginStart="5dp"android:text="商品详情"app:layout_constraintStart_toStartOf="@+id/cd_tv_param"app:layout_constraintTop_toBottomOf="@+id/cd_rcv" /><ImageViewandroid:id="@+id/iv1"android:layout_width="match_parent"android:layout_height="550dp"android:src="@drawable/cd_ad5"android:scaleType="fitXY"app:layout_constraintStart_toStartOf="@+id/cd_tv_param"app:layout_constraintTop_toBottomOf="@+id/tv2" /><ImageViewandroid:id="@+id/iv2"android:layout_width="wrap_content"android:layout_height="550dp"android:src="@drawable/cd_ad6"android:scaleType="fitStart"app:layout_constraintStart_toStartOf="@+id/cd_tv_param"app:layout_constraintTop_toBottomOf="@+id/iv1" /></androidx.constraintlayout.widget.ConstraintLayout></androidx.core.widget.NestedScrollView><LinearLayoutandroid:id="@+id/cd_ll"android:layout_width="match_parent"android:layout_height="40dp"android:layout_gravity="top"android:background="@color/grey_000"android:orientation="horizontal"android:visibility="invisible"><TextViewandroid:id="@+id/cd_tv_commodity"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="宝贝"android:textSize="16sp" /><TextViewandroid:id="@+id/cd_tv_comment"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="评价"android:textSize="16sp" /><TextViewandroid:id="@+id/cd_tv_details"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="详情"android:textSize="16sp" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:background="@color/grey_100"android:orientation="horizontal"><com.apeman.mall.custom.MyImageButtonandroid:id="@+id/mib_shop"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"app:src="@mipmap/ic_shop"app:text="店铺"app:textSize="12sp" /><com.apeman.mall.custom.MyImageButtonandroid:id="@+id/mib_service"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"app:src="@mipmap/ic_service"app:text="客服"app:textSize="12sp" /><com.apeman.mall.custom.MyImageButtonandroid:id="@+id/mib_collect"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"app:src="@mipmap/ic_collect"app:text="收藏"app:textSize="12sp"/><Buttonandroid:id="@+id/bt_addShopping"android:layout_width="0dp"android:layout_height="35dp"android:layout_weight="2"android:layout_gravity="center"android:background="@drawable/btn_bg_left_round"android:text="加入购物车"android:textColor="@android:color/white"/><Buttonandroid:id="@+id/bt_purchase"android:layout_width="0dp"android:layout_height="35dp"android:layout_weight="2"android:layout_gravity="center"android:layout_marginEnd="2dp"android:background="@drawable/btn_bg_right_round"android:text="立即购买"android:textColor="@android:color/white"/></LinearLayout></FrameLayout>

代码:


/*** @author QCoder* @date 2020/5/6*/
public class CommodityDetailsActivity extends AppCompatActivity implements View.OnClickListener {private List<DataBean> beans;private Banner banner;private NestedScrollView mSV;private TextView tv_commodity;private TextView tv_comment;private TextView tv_details;private TextView tv1;private TextView tv2;private TextView paramOption;private LinearLayout cd_ll;private int mTop1;private int mTop2;private int mTop3;private MyImageButton mib_shop;private MyImageButton mib_service;private MyImageButton mib_collect;private Button bt_addShopping;private Button bt_purchase;private List<CommentBean> commentBeans;private boolean isCollect = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActionBar actionBar = getSupportActionBar();if(actionBar!=null){actionBar.hide();}setContentView(R.layout.activity_commodity_details);initView();}public static void start(Context context) {Intent intent = new Intent(context, CommodityDetailsActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}/*** 初始化界面*/private void initView() {//banner 数据初始化initBannerData();//评论 数据初始化initComment();mSV = findViewById(R.id.cd_sv);tv_commodity = findViewById(R.id.cd_tv_commodity);tv_comment = findViewById(R.id.cd_tv_comment);tv_details = findViewById(R.id.cd_tv_details);tv1 = findViewById(R.id.tv1);tv2 = findViewById(R.id.tv2);paramOption =findViewById(R.id.cd_tv_param);cd_ll = findViewById(R.id.cd_ll);RecyclerView rcv = findViewById(R.id.cd_rcv);mib_shop = findViewById(R.id.mib_shop);mib_service = findViewById(R.id.mib_service);mib_collect = findViewById(R.id.mib_collect);//添加适配器CommentAdapter commentAdapter = new CommentAdapter(this);commentAdapter.setBeanList(commentBeans);//设置RecyclerViewrcv.setLayoutManager(new LinearLayoutManager(this));rcv.setHasFixedSize(true);rcv.setAdapter(commentAdapter);rcv.setNestedScrollingEnabled(false);bt_addShopping = findViewById(R.id.bt_addShopping);bt_purchase =findViewById(R.id.bt_purchase);//banner初始化initBanner();initListener();}/*** 初始化 轮播图的数据*/private void initBannerData() {beans = new ArrayList<>();DataBean dataBean1 = new DataBean(R.drawable.cd_ad1, "");beans.add(dataBean1);DataBean dataBean2 = new DataBean(R.drawable.cd_ad2, "");beans.add(dataBean2);DataBean dataBean3 = new DataBean(R.drawable.cd_ad3, "");beans.add(dataBean3);DataBean dataBean4 = new DataBean(R.drawable.cd_ad4, "");beans.add(dataBean4);DataBean dataBean5 = new DataBean(R.drawable.cd_ad5, "");beans.add(dataBean5);}/*** 初始化轮播图*/private void initBanner() {banner = findViewById(R.id.cd_banner);banner.setAdapter(new ImageAdapter(beans)).setIndicator(new CircleIndicator(this)).setPageTransformer(new DepthPageTransformer()).start();}/*** 初始化监听事件*/private void initListener() {tv_commodity.setOnClickListener(this);tv_comment.setOnClickListener(this);tv_details.setOnClickListener(this);paramOption.setOnClickListener(this);//监听滚动事件,实现对应按钮变色,已经顶部栏的渐变mSV.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {if (scrollY == 0) {//隐藏顶部栏cd_ll.setVisibility(View.INVISIBLE);} else if (scrollY < mTop2 / 2) {cd_ll.setVisibility(View.VISIBLE);//设置顶部栏的透明度cd_ll.getBackground().setAlpha(50);} else if (scrollY < mTop2) {  //在【宝贝】区域中,顶部栏中的【宝贝】被标记//清除字体颜色clearColor();cd_ll.getBackground().setAlpha(130);//设置选中的字体颜色tv_commodity.setTextColor(getResources().getColor(R.color.colorAccent));} else if (scrollY < mTop3 / 2) {cd_ll.getBackground().setAlpha(200);} else if (scrollY < mTop3) {clearColor();cd_ll.getBackground().setAlpha(255);tv_comment.setTextColor(getResources().getColor(R.color.colorAccent));} else {clearColor();tv_details.setTextColor(getResources().getColor(R.color.colorAccent));}});//mSVmib_shop.setOnClickListener(this);mib_service.setOnClickListener(this);mib_collect.setOnClickListener(this);bt_addShopping.setOnClickListener(this);bt_purchase.setOnClickListener(this);}/*** 清除字体颜色*/private void clearColor() {tv_commodity.setTextColor(ContextCompat.getColor(this,R.color.grey_800));tv_comment.setTextColor(ContextCompat.getColor(this,R.color.grey_800));tv_details.setTextColor(ContextCompat.getColor(this,R.color.grey_800));}/*** 初始化 评论数据*/private void initComment() {commentBeans = new ArrayList<>();CommentBean commentBean1 = new CommentBean(ContextCompat.getDrawable(this, R.drawable.ic_hot), "用户1", "整体评价:版型非常好,给老爸买的,非常喜欢,非常满意 面料品质:加了蚕丝,质感很好,面料偏哑光,显得有档次 厚薄度:初春季节正合适");commentBeans.add(commentBean1);CommentBean commentBean2 = new CommentBean(ContextCompat.getDrawable(this, R.drawable.ic_new), "用户2", "大小合适,偏长(打死不认我腿短),偏宽(休闲裤偏直筒,微修身)总体一般吧,面料丝滑");commentBeans.add(commentBean2);CommentBean commentBean3 = new CommentBean(ContextCompat.getDrawable(this, R.drawable.onsale), "用户3", "上身效果:跟图一样的,很好看 厚薄度:恰好,春天和夏天穿都很合适 尺码推荐:尺码标准的 整体评价:非常不错,已经第二次购买了 材质特性:很好 面料品质:质量很好,不会起球");commentBeans.add(commentBean3);CommentBean commentBean4 = new CommentBean(ContextCompat.getDrawable(this, R.drawable.ic_vip), "用户4", "整体评价:休闲百搭 裤子不错,以前穿过a21。 面料品质:舒服");commentBeans.add(commentBean4);}/*** 点击事件** @param v 控件*/@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.cd_tv_commodity:mSV.smoothScrollTo(0, mTop1);break;case R.id.cd_tv_comment:mSV.smoothScrollTo(0, mTop2);break;case R.id.cd_tv_details:mSV.smoothScrollTo(0, mTop3);break;case R.id.mib_shop://TODO 跳到商家页ToastUtil.showToast("功能开发中...");break;case R.id.mib_service://TODO 跳到与客服的聊天页ToastUtil.showToast("待开发中...");break;case R.id.mib_collect:if (!isCollect){ToastUtil.showToast("收藏成功~");mib_collect.setImageView(R.mipmap.ic_collect_pressed);isCollect = true;}else {ToastUtil.showToast("取消收藏~");mib_collect.setImageView(R.mipmap.ic_collect);isCollect = false;}break;case R.id.cd_tv_param:case R.id.bt_addShopping:Intent intent = new Intent(this,ParameterActivity.class);intent.putExtra("type","addCart");startActivity(intent);overridePendingTransition(R.anim.bottom_in,R.anim.bottom_static);break;case R.id.bt_purchase:Intent intent2 = new Intent(this,ParameterActivity.class);intent2.putExtra("type","purchase");startActivity(intent2);//启动图2活动需要添加的效果overridePendingTransition(R.anim.bottom_in,R.anim.bottom_static);break;default:break;}}/*** 该活动获得焦点后获取布局上 某些控件的顶部位置,为滚动监听动作服务** @param hasFocus 是否获得焦点*/@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);mTop1 = banner.getTop();mTop2 = tv1.getTop();mTop3 = tv2.getTop();}
}

图2:

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"tools:context=".home.activity.ParameterActivity"><ImageViewandroid:id="@+id/param_pic"android:layout_width="150dp"android:layout_height="150dp"android:layout_marginStart="20dp"android:layout_marginTop="20dp"android:src="@drawable/ad_it"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/param_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="10dp"android:layout_marginTop="47dp"android:text="$"android:textColor="@android:color/holo_red_light"android:textSize="25sp"android:textStyle="bold"app:layout_constraintStart_toEndOf="@+id/param_pic"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/param_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="2dp"android:layout_marginTop="47dp"android:text="599"android:textColor="@android:color/holo_red_light"android:textSize="25sp"android:textStyle="bold"app:layout_constraintStart_toEndOf="@+id/param_tv"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/param_tv2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="10dp"android:layout_marginTop="10dp"android:text="库存"app:layout_constraintStart_toEndOf="@+id/param_pic"app:layout_constraintTop_toBottomOf="@+id/param_tv" /><TextViewandroid:id="@+id/param_store"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="1254"app:layout_constraintStart_toEndOf="@+id/param_tv2"app:layout_constraintTop_toBottomOf="@+id/param_price" /><TextViewandroid:id="@+id/param_tv3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="91dp"android:text="件"app:layout_constraintStart_toEndOf="@+id/param_store"app:layout_constraintTop_toTopOf="parent" /><ImageViewandroid:id="@+id/param_divider"android:layout_width="match_parent"android:layout_height="1.5dp"android:layout_marginStart="10dp"android:layout_marginTop="25dp"android:background="@color/grey_200"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/param_pic" /><TextViewandroid:id="@+id/param_tv4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="属性A"android:layout_marginStart="10dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/param_divider" /><com.google.android.material.internal.FlowLayoutandroid:id="@+id/param_flow"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginStart="10dp"android:layout_marginTop="5dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/param_tv4" /><ImageViewandroid:id="@+id/param_divider2"android:layout_width="match_parent"android:layout_height="1.5dp"android:layout_marginStart="10dp"android:layout_marginTop="5dp"android:background="@color/grey_200"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/param_flow" /><TextViewandroid:id="@+id/param_tv5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="属性B"android:layout_marginStart="10dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/param_divider2" /><com.google.android.material.internal.FlowLayoutandroid:id="@+id/param_flow2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginStart="10dp"android:layout_marginTop="5dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/param_tv5" /><Buttonandroid:id="@+id/param_btn_ensure"android:layout_width="match_parent"android:layout_height="40dp"android:layout_margin="5dp"android:background="@drawable/btn_bg_round"android:text="确 认"android:textColor="@color/white"android:textSize="16sp"app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

代码:

/*** @Author QCoder* @Date 2020/5/13* @Description 参数选择页*/
public class ParameterActivity extends Activity implements View.OnClickListener {private Button ensure;private FlowLayout flowLayout;private FlowLayout flowLayout2;private List<DataBean> list;private String type;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_parameter);type = getIntent().getStringExtra("type");//设置该Activity出场方式WindowManager m = getWindowManager();Display d = m.getDefaultDisplay(); // 为获取屏幕宽、高android.view.WindowManager.LayoutParams p = getWindow().getAttributes();p.height = (int) (d.getHeight() * 0.8); // 高度设置为屏幕的0.8p.width = d.getWidth(); // 宽度设置为屏幕的0.7p.gravity = Gravity.BOTTOM;getWindow().setAttributes(p);initView();initListener();initData(flowLayout);initData(flowLayout2);}public static void start(Context context) {Intent intent = new Intent(context, ParameterActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}/*** 初始化界面*/private void initView() {ensure = findViewById(R.id.param_btn_ensure);if (type.equals("purchase")){ensure.setText("立即购买");}else {ensure.setText("加入购物车");}flowLayout = findViewById(R.id.param_flow);flowLayout2 = findViewById(R.id.param_flow2);}/***初始化监听事件*/private void initListener() {ensure.setOnClickListener(this);}/*** 初始化数据* @param mFlowLayout 需要加载数据的布局*/private void initData(FlowLayout mFlowLayout) {list = new ArrayList<>();DataBean dataBean = new DataBean(R.drawable.ic_new, "猿人新品");list.add(dataBean);list.add(dataBean);list.add(dataBean);LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);layoutParams.setMargins(10, 5, 10, 5);if (mFlowLayout != null) {mFlowLayout.removeAllViews();}for (int i = 0; i < list.size(); i++) {MyImageButton myImageButton = new MyImageButton(this);myImageButton.setHorizontal(true);myImageButton.setBackground(getDrawable(R.drawable.btn_bg_round2));myImageButton.setLayoutParams(layoutParams);int finalI = i;//设置点击事件myImageButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ToastUtil.showToast("点击" + list.get(finalI).getUrl());}});myImageButton.setImageView(list.get(i).getImageRes());myImageButton.setText(list.get(i).getUrl());mFlowLayout.addView(myImageButton, layoutParams);}}/*** 活动结束时,设置退场对话*/@Overridepublic void finish() {super.finish();overridePendingTransition(R.anim.bottom_static, R.anim.bottom_out);}/*** 点击事件* @param v*/@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.param_btn_ensure:if (type.equals("purchase")){ToastUtil.showToast("购买成功");}else {ToastUtil.showToast("宝贝在购物车等主人哦~");}finish();break;}}
}

额外的布局文件:

bottom_in的布局文件

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="100%"android:toYDelta="0"android:duration="300"/>
</set>

bottom_out的布局文件

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="25"android:toYDelta="100%"android:duration="300"/>
</set>

bottom_static

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="1"android:toYDelta="1"android:duration="300" />
</set>

欢迎大家多多指教~

【Android】仿淘宝商品详情页相关推荐

  1. Android 仿淘宝商品详情页下拉足迹Demo

    DropDownMultiPager 仿淘宝等商品详情页下拉足迹效果SimpleDemo 可colne之后看MainActivity的调用,方便二次开发 依赖 compile 'com.nineold ...

  2. 【商城开发三】Android 仿淘宝商品详情页下拉足迹修改版

    开发商城的快有半个月了,需要做到详情页下拉足迹的效果,网上找了找没找到,找到一个差不多还有点问题,然后在基础上进行了二次开发 感谢http://blog.csdn.net/yaphetzhao/art ...

  3. Android开发之仿淘宝商品详情页

    看到有人在问如何实现淘宝商品详情页效果,手痒了就撸了一个,献上效果图 大致梳理一下思路,这里不提供源码 状态栏透明使用开源库StatusBarCompat,为了兼容手机4.4 dependencies ...

  4. 仿淘宝商品详情页图片滑动并且数字也跟着变化

    今天遇到需求需要做个淘宝那样的商品详情页如图(这里只差放图片了)支持移动端,当然用的是swiper.js支持左右滑动 上代码 html代码 <div class="swiper-con ...

  5. 仿淘宝商品详情页TabLayout+ListView

    第一次写博客,我是一名Android的小码农写代码也有三四年了.有点好玩的跟大家分享一下 项目对商品详情页改版有新需求.顶部是一个渐变的Title包括"宝贝","详情&q ...

  6. 仿淘宝商品详情页顶部nav屏幕滑动出现-商品/详情/评价/分享

    项目开发实录 将其简化为一个demo方便后续使用 简化淘宝顶部的淡入淡出并将其修改为两个不同盒子之间的切换,毕竟实际项目实际操作嘛. 下面的代码块为简略版的demo,直接复制粘贴即可实现效果(移动端喔 ...

  7. 仿淘宝商品详情页中(继续拖动到图文详情)

    参考文章http://www.jb51.net/article/91858.htm 核心view 有2个 一个是自定义的ViewGroup 一个是自定义的ScrollView 首先是自定义的Scrol ...

  8. 仿淘宝商品详情页顶部banner和沉浸式效果

    这边使用第三方沉浸式库https://github.com/gyf-dev/ImmersionBar 使用自己去研究 一.沉浸式效果 主要是看滑动过程中toolBar的透明度变化 布局如下: < ...

  9. 仿淘宝商品详情页[带有视频和图片的轮播功能]

    因为工作需求的原因,自己写了一个demo,既实现了功能,又能与大家分享,很高兴!Demo已上传GitHub,https://github.com/xinniangdeweidao/CloneTaoba ...

  10. Android 仿淘宝商品详情标题栏变色,布局层叠效果

    如图效果 思路:如图可以将图片中布局分成三个部分,1标题栏透明背景,2上半部分布局,3下半部分布局,当我们向上拉动的时候,1布局实现渐变,从透明变到白色,2布局背景色渐变到白色,23布局随滚动条上拉, ...

最新文章

  1. Mac下SVN的使用
  2. Blockchain Meeting supporting papers
  3. 通俗易懂,java8 .stream().map().collect()用法
  4. Asp.Net Core实战
  5. 安装perl5.10.0
  6. 基础【枚举】-----(枚举)------(转)
  7. 如何在ReactJS中使用FastReport Core Web Report
  8. Linux使用docker安装RabbitMQ一站式教程【图文教程】
  9. txt转excel 处理数据
  10. latex tabular自动换行
  11. 超详细图文教程,阿里云服务器搭建
  12. 产品策划到底是做什么的?
  13. 【精】JAVA各大厂问题汇总-HELLO XF
  14. 【FATE联邦学习】FATE联邦学习使用GPU、指定cuda下标
  15. java js方法_java如何调用js方法
  16. source insight 仿 vscode 主题 (GitHub免积分下载)
  17. 【C/C++】printf格式化输出-科学计数法形式的浮点数
  18. ES6 trim()方法
  19. 【唐诗学习】四、边塞诗派代表
  20. python爬虫,wallhaven热门壁纸多线程采集下载源码

热门文章

  1. Linux下sz下载文件超过4G办法
  2. 化工图纸中LISP_化工设计之工程图纸(这篇文章给你讲全了)
  3. html页面pc端显示正常,手机端页面整体偏左(兼容性处理)
  4. python元组操作_python元组操作
  5. 电脑安装什么杀毒软件最好?这4款满分杀毒软件了解一下
  6. 2009年10月 档案_39健康博客_benwen520dan
  7. VS2017--如何添加版权声明注释
  8. 干货丨3分钟了解今日头条推荐算法原理(附视频+PPT)
  9. 微软应用商店打不开代码代码: 0x80131500
  10. Sunshine 项目构思