pinterest反编译(正在进行时)

来源:互联网 发布:被芯哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/05 09:50

参考http://www.blogjava.net/hackzhang/archive/2012/03/23/372532.html

能把pinterest反编译了,我还是蛮激动的,同时我也体会到,开源其实就是这样,慢慢的,这些表面的界面和语言都是浮云,真正令人着迷的应该就是它的原理和本质。


现在看着有点乱了,主界面入口是:widget_layout.xml 和 com.pinterest.activity.task.activity.TaskPagerActivity.class

布局方面:

widget_layout中含有 widget_list 

widget_list含有 widget_list_empty ---> widget_header_unauth; widget_header_auth; widget_loading_pin; widget_empty_retry;这四个


styles.xml总是出错,太烦了,所以我把drawable下的abs_打头的布局文件全复制了一遍。


这个pin_spin_animation.xml还是蛮有趣的,其中包含了许多loading_pin_XX.xml


在TaskPagerActivity中的 TaskToastContainer似乎是一个自定义的Toast,如果是这样,这个暂时可以放着不用管它。

接着看,这个TaskMainViewAdapter看起来比较关键

ModifiedViewPager貌似不好用,是android.support.v4.view中的,为了适配3.0以下的机型


抽象类TaskAnimation,其中出现 ViewHelper,

其实就是com.nineoldandroids.view,是一个针对2.3以下的开源动画库,所以这里我们可以不用管它;

所以这个抽象类其实可以不用。


在TaskMainViewPager中,有个ViewPagerFragment,你较复杂

ViewPagerFragment首先继承了TaskFragment --> PFragment --> Fragment

越来越有趣了呵,那就先从 PFragment开始完成吧,PFragment中 调用接口 Refreshable,

public interface Refreshable {
public abstract long getLastRefresh();
public abstract void refresh();
}

但是我还不明白为什么要这样设计,调用这个接口,就要在PFragment中实现那两个抽象方法。

紧接着,我看到了其中的hideWaitDialog()中使用了FragmentActivity,好吧,support.v4.app包中的。

这个方法的 localFragmentActivity instanceof DialogControl 让我又有些疑惑,这个DialogControl又是个接口。

其实这里我不懂  if (( localFragmentActivity instanceof DialogControl))
     ((DialogControl)localFragmentActivity).hideWaitDialog();

算了,先看后面的,先来不得不解决一个Application的问题了

Application-->PApplication-->Application,这两个Application不是同一个;




接下来


shit ,总算找到了主界面中user界面的布局了 header_home_suggestion.xml

com.pinterest.ui.imageview.GrayWebImageView 这个得研究一下。


com.pinterest.ui.listview.ListCellTwoLinesText这个也许是瀑布流的列表,不过似乎不是,因为其中有title和subtitile;


这个是TaskTrasactionActivity中的

FragmentTransaction localFragmentTransaction = getSupportFragmentManager().beginTransaction();
      localFragmentTransaction.setCustomAnimations(2130968581, 2130968582, 2130968579, 2130968580);


可以清楚的看到,HomeFragment是主界面;你可以看到下面这段代码

public void onViewCreated(View paramView, Bundle paramBundle)
  {
    super.onViewCreated(paramView, paramBundle);
    this._viewPager.setCurrentItem(1);
    this._viewPager.setOnPageChangeListener(this.onPageChanged);
    this._homeActionBar = ((HomeTabBar)paramView.findViewById(2131230796));
    this._homeActionBar.setListener(this.onTabChanged);
    this._homeActionBar.setCurrentTab(1);
  }


pinterest.base.Pinalytics.class


com.pinterest.activity.fastfollow


com.pinterest.activity.board.view.BoardHeaderView


ui.scrollview.ObservableScrollView 这个是干什么的?
现在正在看ui.scrollview.*,里面有HScrollView,ObservableScrollView,PullRefreshScrollView,


看到ui.listview中的DismissingOverscrollListView; 和 DismissingOverscrollListView$2;(这个就是内部的listener类)
这下就比较明确了,现在是找谁用了这个类中的方法!


在anim中,anim_decrease.xml最接近从板子退回到主界面时主界面的动画效果;

 anim_fragment_close_in.xml也接近从板子退回主界面时的主界面的动画效果;


anim_pimageview_fade_in.xml板子上的图片的渐现效果

anim_shake.xml和cycle_3.xml 板子划入后的抖动效果;

不过我感觉似乎anim_window_in.xml可能是这个抖动效果,真相只有一个,我们不久就知道了。

真相出来了,anim_shake.xml和cycle_3.xml应该是长按图片出现的3个圆按钮。

可是点击出这个shake效果的应该是长按,而不是简单的onItemClick,这块儿还有待商榷。


又发现anim_window_out.xml好像是主界面Out的,anim_window_in


在api.model中的 CategoryFeed 和 Category是板子上的内容


关于滑动的一切都在 package com.pinterest.ui.grid

其中的PinterestAdapterView有很多内部类,

PinterestAdapterView$4是管手势滑动的,但好像不是板子的横向滑动。


下面的是整界面

setting_profile.xml


fragment_accountsettings.xml



fragment_board_collab_invite.xml


下面几个布局应该重点研究一下

fragment_unauth_feed_wall.xml 用到主界面瀑布流


现在有点乱,我们仔细整理。

这个是card外的背景色

在widget_selectable_bg.xml中,普通是widget_bg_light <solid android:color="#fff2f2f2" />

按下后是widget_bg_dark


TextWatcher  TextView.OnEditorActionListener

评论的时候 EditView 用到。

还有  MultiAutoCompleteTextView


现在先解决actionbar_user.xml其include下面两个

actionbar_user_profile.xml

actionbar_user_tabs.xml

在fragment_user_task.xml中,其又include了actionbar_user.xml

里面是一个Viewpager,分别包含fragment_user_boardsview.xml

fragment_user_pinsview.xml 和 fragment_user_peopleview.xml 还有 fragment_user_aboutview.xml

其含有gridview_pin_combo.xml



重要的布局文件
fragment_board_gridview.xml也包含了 ui.scrollview.ObservableScrollView
megaphone  
activity.board.view.BoardHeaderView
board_header_invite_stub
ui.grid.AdapterEmptyView
ui.grid.PinterestAdapterView
ui.grid.AdapterFooterView
ui.scrollview.ObservableScrollView

现在我要做的是找到AdapterEmptyView的布局


layout_pin_bar.xml是那个Pin,like,Send的那个。


现在发现一个很神奇的地方,在values的public.xml中,有layout的所有id

如<public type="layout" name="fragment_home_task" id="0x7f030084" />
    <public type="layout" name="fragment_listview" id="0x7f030085" />
    <public type="layout" name="fragment_pager_task" id="0x7f030086" />
    <public type="layout" name="fragment_people_search" id="0x7f030087" />

真的是太棒了,fucking awosome!

这样就可以找到代码中的所有布局了,我真的是天才呀。

随便搜一个进制查看的,http://www.ximizi.com/JinZhi_ZhuanHuan.php 可以开始疯狂出击了。


Let the Game Begin...

ui.grid.AdapterEmptyView  ---> list_empty.xml


android:visibility

Controls the initial visibility of the view.

Must be one of the following constant values.

ConstantValueDescriptionvisible0Visible on screen; the default value.invisible1Not displayed, but taken into account during layout (space is left for it).gone2Completely hidden, as if the view had not been added.







0 0
原创粉丝点击