仿淘宝继续上拉进入商品详情页的效果,双Fragment实现;

动画效果:

slide_above_in.xml

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

slide_above_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate
android:toYDelta="-100%p"
android:fromXDelta="0%p"
android:duration="300"/> <alpha
android:fromAlpha="1.0"
android:toAlpha="0.5"
android:duration="300"/> </set>

slide_below_in.xml

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

slide_below_out.xml

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

代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private FrameLayout fl;
private AboveFragment AF;
private BelowFragment BF;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_double_fragment);
fl = (FrameLayout) findViewById(R.id.fl);
btn = (Button) findViewById(R.id.qiehuan);
btn.setOnClickListener(this);
AF = new AboveFragment();
BF = new BelowFragment();
initList(); //先给Fragment设置监听
getSupportFragmentManager().beginTransaction().add(R.id.fl,AF).commit();
} private void initList() {
AF.setContinueSlideScrollView(new ContinueSlideScrollView.onContinueSlide() {
@Override
public void onContinueSlideTop() { } @Override
public void onContinueSlideBottom() {
if (BF.isAdded()){
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_below_in,R.anim.slide_below_out).show(BF).commit();
}else{
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_below_in,R.anim.slide_below_out)
.add(R.id.fl,BF).commit();
}
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_above_in,R.anim.slide_above_out)
.hide(AF).commit();
}
}); BF.setContinueSlideScrollView(new ContinueSlideScrollView.onContinueSlide() {
@Override
public void onContinueSlideTop() {
if (AF.isAdded()){
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_above_in,R.anim.slide_above_out)
.show(AF).commit();
}else{
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_above_in,R.anim.slide_above_out)
.add(R.id.fl,AF).commit();
}
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_below_in,R.anim.slide_below_out)
.hide(BF).commit();
} @Override
public void onContinueSlideBottom() { }
});
} @Override
public void onClick(View view) {
if ("0".equals(btn.getTag().toString())){
btn.setTag("1");
if (BF.isAdded()){
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_below_in,R.anim.slide_below_out).show(BF).commit();
}else{
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_below_in,R.anim.slide_below_out)
.add(R.id.fl,BF).commit();
}
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_above_in,R.anim.slide_above_out)
.hide(AF).commit();
}else{
btn.setTag("0");
if (AF.isAdded()){
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_above_in,R.anim.slide_above_out)
.show(AF).commit();
}else{
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_above_in,R.anim.slide_above_out)
.add(R.id.fl,AF).commit();
}
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_below_in,R.anim.slide_below_out)
.hide(BF).commit();
}
}
}

其中 initList() 函数是我定义的ScrollView滑动到底部再继续滑动的监听,https://mp.csdn.net/postedit/85257597

项目这个Demo已上传Github:https://github.com/CuiChenbo/DoubleFragmentSwitch

Android仿淘宝继续上拉进入商品详情页的效果,使用双Fragment动画切换;的更多相关文章

  1. 高仿淘宝和聚美优品商城详情页实现《IT蓝豹》

    高仿淘宝和聚美优品商城详情页实现 android-vertical-slide-view高仿淘宝和聚美优品商城详情页实现,在商品详情页,向上拖动时,可以加载下一页. 使用ViewDragHelper, ...

  2. 仿淘宝头像上传功能(三)——兼容 IE6 浏览器。

    前两篇目录: 仿淘宝头像上传功能(一)——前端篇. 仿淘宝头像上传功能(二)——程序篇. 仿淘宝头像上传功能(三)——兼容 IE6 浏览器 之前的这两篇虽然实现了功能,但不兼容低版本浏览器,而且有些浏 ...

  3. Android仿淘宝头条滚动广告条

    之前我使用TextView+Handler+动画,实现了一个简单的仿淘宝广告条的滚动,https://download.csdn.net/download/qq_35605213/9660825: 无 ...

  4. Android -- 仿淘宝广告条滚动

    1,在赶项目的时候我们经常会实现下面这个功能,及添加滚动条广告广播,先看一下淘宝的效果 2,这次实现效果主要使用Android自带的ViewFlipper控件,先来看一下我们的它的基本属性和基本方法吧 ...

  5. Android 仿淘宝头条竖直跑马灯式新闻标题及“分页思想

    在淘宝App的首页中间位置,有一块小小的地方在不知疲倦地循坏滚动着头条标题(见下图的红框区域),这样的设计无疑能够在有限的手机屏幕上展示更丰富的内容.而实现这一功能需要用到的控件就是我在上一篇文章中提 ...

  6. Android仿淘宝购物车demo

    夏的热情渐渐退去,秋如期而至,丰收的季节,小编继续着实习之路,走着走着,就走到了购物车,逛过淘宝或者是京东的小伙伴都知道购物车里面的宝贝可不止一件,对于爱购物的姑娘来说,购物车里面的商品恐怕是爆满,添 ...

  7. Android 仿淘宝属性标签页

    直接看效果图相信这样的效果很多,我之前在网上找了很久没找到自己想要的! <?xml version="1.0" encoding="utf-8"?> ...

  8. 转::iOS 仿淘宝,上拉进入详情页面

    今天做的主要是一个模仿淘宝,上拉进入商品详情的功能,主要是通过 tableView 与 webView 一起来实现的,当然也可根据自己的需要把 webView 替换成你想要的 // // ViewCo ...

  9. 仿淘宝商品详情页上拉弹出新ViewController

    新项目就要开始做了,里面有购物那块,就试着先把淘宝商品详情页的效果做了一下. 1.需求 1.第一次上拉时,A视图拉到一定距离将视图B从底部弹出,A视图也向上 2.显示B视图时下拉时,有刷新效果,之后将 ...

随机推荐

  1. Java 模拟面试题

    1.面向对象的特点 继承,封装,多态 2.对象和类的区别是什么? 对象是对客观事物的抽象,类是对对象的抽象.类是一种抽象的数据类型,它们的关系是,对象是类的实例,类是对象的模板. 3.静态成员和实例成 ...

  2. VSTO:使用C#开发Excel、Word【17】

    使用Range对象Range对象表示电子表格中的单元格范围.范围可以包含一个单元格,多个连续的单元格,甚至多个不连续的单元格.您可以在Excel中选择时按住Ctrl键选择多个不连续的单元格. 获取特定 ...

  3. sql将服务器名称换成本地IP

    安装sql后服务器名称默认为电脑的名称,而想要换成习惯用的本地ip也是可以的. 将配置管理中的MSSQLSEVER协议中的TCP/IP启用,并且打开其属性,找到IP地址,添加本地IP,并设置成启用,然 ...

  4. C#获取文件目录

    Form1.cs using System;using System.Collections.Generic;using System.ComponentModel;using System.Data ...

  5. leetcode题解2. Add Two Numbers

    题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...

  6. ecmall 入口文件解析 引入了什么

    每一个框架都有自动载入的工具库,搜了半天也没搜到相关介绍,就自己看入口文件琢磨了一下, <?php define('ROOT_PATH', dirname(__FILE__)); //定义项目根 ...

  7. 洛谷 P1763 状态压缩dp+容斥原理

    (题目来自洛谷oj) 一天,maze决定对自己的一块n*m的土地进行修建.他希望这块土地共n*m个格子的高度分别是1,2,3,...,n*m-1,n*m.maze又希望能将这一些格子中的某一些拿来建蓄 ...

  8. centos7 ssh连接慢

    指的是连接到centos7,输入密码后要等很久才会返回.之前很多人遇到的问题都是由于/etc/ssh/sshd_config的UseDNS配置项和GSSAPIAuthentication配置项引起的, ...

  9. python2.7安装beautifulsoup包

    python2.7安装beautifulsoup包 准备条件: 1.已经安装好python2.7 2.下载beautifulsoup包,选择合适的包,网址:https://www.crummy.com ...

  10. ES5与ES6中的继承

    ES5继承在ES5中没有类的概念,所以一般都是基于原型链继承,具体的继承方法有以下几种: 父类: function Father (name) { this.name = name || 'sam' ...