【Android】仿淘宝商品详情页

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

图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>

欢迎大家多多指教~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34196.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仿淘宝— 商品图片切换

在线展示 html: <div id"box"><ul><li id"li01"><img src"./images/01.jpg" alt""></li><li id"li02"><img src"./images/02.jpg" alt""></li><l…

淘宝内容场下的人物理解系统

本文的人物理解特指对人的视觉特征的识别&#xff0c;即从视觉维度&#xff0c;获取视频或图片中人物的身份、性别、年龄、颜值、身材、服饰、人-物关系等各种信息。 背景介绍 随着网络通信技术的迅猛发展&#xff0c;主流的信息传播已经揉合了文本、图像、语音、视频等多种媒体…

实战3-淘宝用户行为分析及可视化

淘宝用户行为分析及可视化 目录 淘宝用户行为分析及可视化分析背景明确问题读取和理解数据数据预处理数据分析与可视化用户行为分析日PV和日UVPV与UV相关性可视化 时PV和时UV相关性可视化 不同行为类型用户PV分析操作行为分析操作行为情况操作行为可视化 用户消费行为分析日ARP…

怎样一同下载淘宝天猫的商品主图详情图细节图和属性图并保存

我们都知道一个商品链接里的图片素材&#xff0c;包含有主图、主图视频、详情图、属性图等等&#xff0c;那么我们能不能把一整个链接里的所有商品图一次都给导出来保存呢&#xff1f;答案是&#xff0c;当然是可以的&#xff0c;可我们该怎么正确的去操作呢&#xff1f;下面小…

超稳定的接口——淘宝/天猫获得淘宝商品详情

item_get-获得淘宝商品详情 注册开通 onebound.taobao.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,…

弘辽科技:如何拍摄出效果好的淘宝主图?商品主图的基本要求有?

原标题《弘辽科技&#xff1a;如何拍摄出效果好的淘宝主图&#xff1f;商品主图的基本要求有&#xff1f;》 开店后&#xff0c;对于商家而言&#xff0c;接下来就是对店铺的一系列的运营和优化操作。比如商品主图设计与拍摄、店铺装修、商品发布、订单管理和配送等工作。可以…

淘宝用户行为分析

一、项目介绍 1.概述 本数据集是阿里巴巴提供的一个淘宝用户行为数据集&#xff08;数据来源&#xff1a;数据集-阿里云天池&#xff09;&#xff0c;包含了2017年11月25日至2017年12月3日之间有行为的约一百万随机用户的所有行为&#xff08;行为包括点击、购买、加购、喜欢&…

模仿淘宝主页

图片资源链接&#xff1a;http://pan.baidu.com/s/1jHAdLNg 密码&#xff1a;5uo1 代码资源链接&#xff1a;链接&#xff1a;http://pan.baidu.com/s/1slRaUIT 密码&#xff1a;8kin html 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> …

Android模仿淘宝详情页界面

话不多说—先上效果图&#xff1a; 图1中主要需要实现的效果&#xff1a; 1.轮播图 2.顶部导航栏的渐变 3.顶部导航栏随着滑动的位置选择对应的值以及点击滑动到对应位置 Android模仿淘宝详情页界面文件&#xff1a;url80.ctfile.com/f/25127180-734377737-78795d?p551685…

聊聊淘宝天猫个性化推荐技术演进史

引言&#xff1a;个性化推荐技术直面用户&#xff0c;可以说是站在最前线的那个。如今&#xff0c;从用户打开手机淘宝客户端&#xff08;简称“手淘”&#xff09;或是手机天猫客户端&#xff08;简称“猫客”&#xff09;的那一刻起&#xff0c;个性化推荐技术就已经启动&…

淘宝买家秀后台操作与各场景展示逻辑

宝贝洋淘买家秀&#xff1a;可操作加精展示在宝贝评价页面 店铺洋淘买家秀&#xff1a;店铺买家秀内容查看及管理 精选买家秀&#xff1a;被平台审核通过的买家秀&#xff0c;就是精选买家秀集合地。可操作转发至微淘。 加精后的买家秀会在详情页下出现&#xff0c;效果如下 …

生成式 AI 讲故事,儿童也能创作自己的睡前故事? #Create With Alexa

哈佛大学的 Sandra Cortesi 认为&#xff0c;父母应该尽量多地让孩子接触能够激发其主动创造力的技术。 亚马逊正在通过一项新的 Alexa 功能进入生成式人工智能热潮&#xff0c; 开始涉足讲故事领域&#xff0c;Create With Alexa 就是亚马逊在讲故事技术的一次尝试&#xff0c…

COMSOL空气反应 模型框架

Comsol等离子体模块&#xff0c;40多种空气反应框架&#xff0c;主要N2和O2。

chatgpt赋能python:Python中文版转换指南

Python中文版转换指南 Python是一种流行的编程语言&#xff0c;它的简单易学和开发效率高受到了全球众多开发者的青睐&#xff0c;但是很多初学者非常苦恼的是&#xff0c;Python的官网和文档全都是英文版的。在中国大陆的用户中&#xff0c;这一问题尤为突出。 本文将介绍Py…

chatgpt赋能python:Python文本编码转换详解

Python文本编码转换详解 在Python中&#xff0c;文本编码转换是一个非常常见的任务。本文将详细介绍Python中的文本编码转换&#xff0c;并提供一些常见的示例和代码片段。 什么是文本编码转换&#xff1f; 在计算机中&#xff0c;文本是以二进制形式存储的。文本编码是一种…

Oracle帐户被锁了,怎么解锁

当多次输入错误密码时&#xff0c;会被oracle视为恶意连接&#xff0c;账户就会锁定&#xff0c;解锁也很简单&#xff0c;步骤如下 第一步&#xff1a; 在数据库安装的电脑上&#xff0c;运行窗口中输入cmd&#xff0c;调出命令提示符界面。 第二步&#xff1a; 用管理员身…

Oracle scott账户被锁定,scott默认密码,sys,system默认密码

Windows安装oracle 安装oracle 出现Environment variable: "PATH" 在stage\cvu\目录下修改cvu_prereq.xml文件&#xff0c;在<CERTIFIED_SYSTEMS>字段下添加&#xff1a; 改 cvu_prereq.xml 里面 的配置&#xff0c;cvu_prereq.xml 文件在oracle安装解压包da…

实现登录密码输入错误次数过多,锁定用户账号,前台可以进行解锁的业务(未完善版本)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前台实现解锁二、后台逻辑实现二、步骤1.数据库2.代码实现 前言 工作的第一天&#xff0c;就接到了一个登录锁定与解锁的需求&#xff0c;第一反应&#x…

geth如何解锁账户?

2019独角兽企业重金招聘Python工程师标准>>> 默认情况下&#xff0c;你在Geth中的账户是被锁住的&#xff0c;你不能用这些被锁住的账户发送交易&#xff0c;例如转账或调用合约方法。因此如果你需要使用Geth发送交易&#xff0c;就需要先解锁账户。那么&#xff0c…

烽火HG2543C1获得telecomadmin密码以及禁用tr069

因为在网上找不到删除tr069的教程自己摸索半天终于找到方法&#xff0c;特意来此分享一下我的思路 输入 192.168.1.1:8080 进入普通后台然后输入 192.168.1.1:8080/cgi-bin/telnetenable.cgi?telnetenable1 开启telnet 开启cmd输入 telnet 192.168.1.1 &#xff0c;密码是…