谷歌电子市场9--详情界面

1.详情页(HomeDetailActivity)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //初始化加载页面
    mLoadingPage = new LoadingPage(UIUtils.getContext()) {

        @Override
        public View onCreateSuccessView() {
            return HomeDetailActivity.this.onCreateSuccessView();
        }

        @Override
        public ResultState onLoad() {
            return HomeDetailActivity.this.onLoad();
        }

    };

    setContentView(mLoadingPage);
    mPackageName = getIntent().getStringExtra("package");
    //开始加载数据
    mLoadingPage.loadData();
}

/**
 * 加载网络数据
 * @return
 */
public ResultState onLoad() {
    HomeDetailProtocol protocol = new HomeDetailProtocol(mPackageName);
    mData = protocol.getData(0);
    if (mData != null) {
        return ResultState.STATE_SUCCESS;
    } else {
        return ResultState.STATE_ERROR;
    }
}

2.应用信息封装(AppInfo)

AppInfo新增字段

public class AppInfo {

	public String des;
	public String downloadUrl;
	public String iconUrl;
	public String id;
	public String name;
	public String packageName;
	public long size;
	public double stars;

	// 以下字段共应用详情页使用
	public String author;
	public String date;
	public String downloadNum;
	public String version;
	public ArrayList<SafeInfo> safe;
	public ArrayList<String> screen;

	public static class SafeInfo {
		public String safeDes;
		public int safeDesColor;
		public String safeDesUrl;
		public String safeUrl;
	}

}

3.详情页布局开发  

思路: 用ScrollView包裹,保证可以上下滑动.每个模块使用FrameLayout作为容器,动态添加相关模块布局.

layout_home_detail.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="3dp" >

    <FrameLayout
        android:id="@+id/fl_detail_appinfo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/list_item_bg_selector" >
    </FrameLayout>

    <FrameLayout
        android:id="@+id/fl_detail_safeinfo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/list_item_bg_selector" >
    </FrameLayout>

    <HorizontalScrollView
        android:id="@+id/hsv_detail_pics"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </HorizontalScrollView>

    <FrameLayout
        android:id="@+id/fl_detail_des"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </FrameLayout>
</LinearLayout>

</ScrollView>

4.展开收起动画效果

/**
 * 展开或者收起安全描述信息
 */
protected void toggle() {
    // 需要引入nineoldandroids.jar,可以兼容api11以下的版本
    ValueAnimator animator;
    if (isExpanded) {
        // 收起描述信息
        isExpanded = false;
        // 初始化按指定值变化的动画器, 布局高度从mDesRootHeight变化到0,此方法调用,并开启动画之后,
        // 会将最新的高度值不断回调在onAnimationUpdate方法中,在onAnimationUpdate中更新布局高度
        animator = ValueAnimator.ofInt(mDesRootHeight, 0);
    } else {
        // 展开描述信息
        isExpanded = true;
        // 初始化按指定值变化的动画器, 布局高度从0变化到mDesRootHeight
        animator = ValueAnimator.ofInt(0, mDesRootHeight);
    }

    // 设置动画更新的监听
    animator.addUpdateListener(new AnimatorUpdateListener() {

        // 在动画开始以后,每次动画有了最新的状态都会回调此方法
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            // 获取当前最新的高度信息
            Integer height = (Integer) valueAnimator.getAnimatedValue();
            mParams.height = height;
            // 更新安全描述的高度
            llDesRoot.setLayoutParams(mParams);
        }
    });

    // 设置动画监听
    animator.addListener(new AnimatorListener() {

        @Override
        public void onAnimationStart(Animator arg0) {
            // 动画开始
        }

        @Override
        public void onAnimationRepeat(Animator arg0) {
            // 动画重复
        }

        @Override
        public void onAnimationEnd(Animator arg0) {
            // 动画结束
            // 更新安全标识小箭头方向
            if (isExpanded) {
                ivArrow.setImageResource(R.drawable.arrow_up);
            } else {
                ivArrow.setImageResource(R.drawable.arrow_down);
            }
        }

        @Override
        public void onAnimationCancel(Animator arg0) {
            // 动画取消
        }
    });

    // 设置动画时间
    animator.setDuration(200);
    // 开启动画
    animator.start();
}

  

  

  

时间: 2024-08-10 19:17:04

谷歌电子市场9--详情界面的相关文章

Android仿小米商城商品详情界面UI,ScrollView嵌套ScrollView/WebView/ListView

最近公司没事,研究了下多嵌套滚动组件的事件分发,虽然以前也接触过,但都是拿网上的用,也是特别简单的,正好朋友也需要,就研究了下 这个Demo也不是很完善,放上来也是让各位大牛给指点一下,优化优化 使用情景: 小米商城商品详情界面,界面看似ScrollView,但当正常滚动到底部时,提示继续上拉显示更多详情,上拉后直接滚动到第二屏,第二屏是个ViewPager,ViewPager里面的各个pager有的是WebView有的是ListView,有的是ScrollView,一开始想想就特别头晕,后来理

Android之——激活应用程序的详情界面

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47303575 在Android系统自带的设置功能里,进入应用列表后,点击列表条目会进入应用的详情界面.那么我们自己可不可以写一个自己的应用程序,实现激活应用程序的详情界面呢?这个是可以实现的,那我们就一起来看看如何实现这个功能吧.不多说了,咱们直接进入主题. 一.原理 由于2.2之前的版本与2.2之后的版本激活应用程序的详情界面的方式不同,所以,我们先要获取到当前Android系

一分钟搭建个人详情界面

http://www.cocoachina.com/ios/20150819/13060.html 作者:吖了个峥 授权本站转载. 前言 前段时间有网友说我个人详情页功能不是很完善,头部视图和选项卡视图不能拖动,今天利用一点时间封装了一套个人详情控制器,并且解决了上次的问题.封装的这套个人详情控制器,用法非常简单,跟UITabBarController用法一样,一分钟内基本就能搭建完一个个人详情页了. 效果如图: 功能难点 按照正常的逻辑 ,往按钮上拖,会触发按钮,达到高亮. 解决技术:需要非常

安卓仿QQ红包领取详情界面动画

为了能清楚的看到这个效果,本人不惜几次花费重金给众群叼发放红包,来查看红包领取详情界面的动画效果,QQ效果如图: 图中我们可以看到,动画处的头像和文字是一起的,即同时并且是整体,注意,是整体进行缩放的,而且是随手指移动来变换大小的,如果我们按照普通的布局方法,ImageView+TextView的方式,用安卓自带的普通动画来实现是无法完成的,那好了,只能自定义View来实现了! 自定义view需要你对view的内部绘制机制有一定的了解,比如onMeasure,MeasureSpec.EXACTL

iOS应用内打开App Store应用详情界面

用iPhone浏览UC浏览器的"应用商店"时,发现可以直接在应用内打开App Store中的应用详情和下载页面. 下面来看看怎么实现这个效果吧. 苹果官方文档 "SKStoreProductViewController Class Reference"里有如下介绍: [plain] view plaincopy A SKStoreProductViewController object presents a store that allows the user to

火狐谷歌模拟一个虚拟界面

1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 4 """ 5 以下程序亲测在ubuntu16.04下有效,其他环境可能会有错误出现 6 """ 7 8 from selenium import webdriver 9 from pyvirtualdisplay import Display 10 11 # 模拟一个虚拟界面 12 display = Display(visible=0, size

仿拉手团购App9-- 产品详情界面

  activity_detail.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://

谷歌电子市场6--排行

1.json 2.HotFragment /** * 排行 * * @author Kevin * */ public class HotFragment extends BaseFragment { private ArrayList<String> mList; @Override public View onCreateSuccessView() { int padding = UIUtils.dip2px(10); // 为了使布局可以上下滑动,需要用ScrollView包装起来 Sc

谷歌电子市场8--首页轮播图

1.HomeFragment Override public View onCreateSuccessView() { MyListView view = new MyListView(UIUtils.getContext()); // 添加头布局 HomeHeaderHolder header = new HomeHeaderHolder(); view.addHeaderView(header.getRootView()); // 设置头布局数据 header.setData(mPicLis