话不多说—先上效果图: 需求分析: 图1中主要需要实现的效果: 1.轮播图 2.顶部导航栏的渐变 3.顶部导航栏随着滑动的位置选择对应的值以及点击滑动到对应位置 图2中主要需要实现的效果: 1.界面从底部出场的效果 2.参数选择的瀑布流式效果 技术分析: 图1: 1.轮播图,可以采用自定义(ViewPager的使用),也可以用直接用第三方库。这里我采用的是 https://github.com/youth5201314/banner (这个是在GitHub上,搜banner,排第一的。选这个跟我自己买东西的心态一样,不知道哪个好,买贵的就对了,哈哈哈) 2.顶部导航栏的渐变,这个效果,我是通过滑动监听,在自己划分的几个区域内,设置不同的透明度。“生硬”的实现了渐变的效果,为了不那么生硬透明度基本等距变化。(如果你有更好的实现方法,欢迎骚扰~) 3.第三点,也是通过对滑动监听实现的。 图2: 1.底部出场,只需要设置一个布局参数属性就行 Gravity.BOTTOM ,动画的话就用 2.第二个效果,可以使用recyclerview嵌套recyclerview实现;也可以用ExpandableListView实现;也可以用FlowLayout实现。因为时间比较急,所以用了FlowLayout简单的实现了上述效果。 具体实现: 图1: 关键地方都有注解,认真康康,如果有疑惑的,随时联系我。(取名这块,我的可能有点乱,欢迎指导~) 布局xml文件: 代码: 图2: xml布局: 代码: 额外的布局文件: bottom_in的布局文件 bottom_out的布局文件 bottom_static 欢迎大家多多指教~
overridePendingTransition(R.anim.bottom_static, R.anim.bottom_out);
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/grey_200" > <androidx.core.widget.NestedScrollView android: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.ConstraintLayout android:layout_width="match_parent" android:layout_height="600dp" > <com.youth.banner.Banner android: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"/> <TextView android: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" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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.RecyclerView android: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" /> <TextView android: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" /> <ImageView android: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" /> <ImageView android: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> <LinearLayout android: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"> <TextView android: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" /> <TextView android: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" /> <TextView android: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> <LinearLayout android: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.MyImageButton android: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.MyImageButton android: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.MyImageButton android: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"/> <Button android: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" /> <Button android: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; @Override protected 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); //设置RecyclerView rcv.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)); } });//mSV mib_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 控件 */ @Override public 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 是否获得焦点 */ @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); mTop1 = banner.getTop(); mTop2 = tv1.getTop(); mTop3 = tv2.getTop(); } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" tools:context=".home.activity.ParameterActivity"> <ImageView android: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" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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" /> <ImageView android: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" /> <TextView android: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.FlowLayout android: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" /> <ImageView android: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" /> <TextView android: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.FlowLayout android: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" /> <Button android: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; @Override protected 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.8 p.width = d.getWidth(); // 宽度设置为屏幕的0.7 p.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() { @Override public 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); } } /** * 活动结束时,设置退场对话 */ @Override public void finish() { super.finish(); overridePendingTransition(R.anim.bottom_static, R.anim.bottom_out); } /** * 点击事件 * @param v */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.param_btn_ensure: if (type.equals("purchase")){ ToastUtil.showToast("购买成功"); }else { ToastUtil.showToast("宝贝在购物车等主人哦~"); } finish(); break; } } }
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="https://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%" android:toYDelta="0" android:duration="300" /> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="https://schemas.android.com/apk/res/android"> <translate android:fromYDelta="25" android:toYDelta="100%" android:duration="300" /> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="https://schemas.android.com/apk/res/android"> <translate android:fromYDelta="1" android:toYDelta="1" android:duration="300" /> </set>
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算