Google electronic market 9-Details page, Google electronic market 9 --
1. Details page (HomeDetailActivity)
@ Overrideprotected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); // initialize the loading page mLoadingPage = new LoadingPage (UIUtils. getContext () {@ Override public View onCreateSuccessView () {return HomeDetailActivity. this. onCreateSuccessView () ;}@ Override public ResultState onLoad () {return HomeDetailActivity. this. onLoad () ;}}; setContentView (mLoadingPage); mPackageName = getIn Tent (). getStringExtra ("package"); // starts loading the data mLoadingPage. loadData ();}/*** load network data * @ 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 New Field
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. Details page layout Development
Idea: Use ScrollView to wrap and ensure smooth up and down. Each module uses FrameLayout as a container and dynamically adds the layout of relevant modules.
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. Expand and collapse the animation effect
/*** Expand or collapse the Security Description */protected void toggle () {// nineoldandroids need to be introduced. jar, which is compatible with ValueAnimator animator of versions earlier than api11; if (isExpanded) {// collapse the description isExpanded = false; // initialize the animation that changes according to the specified value, the layout height changes from mDesRootHeight to 0. After this method is called and the animation is enabled, // The latest height value is continuously called back in the onAnimationUpdate method, update the layout height in onAnimationUpdate: animator = ValueAnimator. ofInt (mDesRootHeight, 0);} else {// expand description isExpanded = true; // Initialize an animation that changes according to the specified value, the layout height changes from 0 to mDesRootHeight animator = ValueAnimator. ofInt (0, mDesRootHeight);} // sets the animation update listener to animator. addUpdateListener (new AnimatorUpdateListener () {// After the animation starts, this method will be called back every time the animation has the latest status @ Override public void onAnimationUpdate (ValueAnimator valueAnimator) {// obtain the latest height Information Integer height = (Integer) valueAnimator. getAnimatedValue (); mParams. height = height; // update the height of the security description llDesRoot. setLayoutParams (mParams) ;}}); // sets the animation listening to animator. addListener (new AnimatorListener () {@ Override public void onAnimationStart (Animator arg0) {// animation start} @ Override public void onAnimationRepeat (Animator arg0) {// animation repetition} @ Override public void onAnimationEnd (Animator arg0) {// animation end // update the Security ID. The Arrow is directed to if (isExpanded) {ivArrow. setImageResource (R. drawable. arrow_up);} else {ivArrow. setImageResource (R. drawable. arrow_down) ;}}@ Override public void onAnimationCancel (Animator arg0) {// animation cancel}}); // set the animation time to animator. setDuration (200); // enable animation or. start ();}