F3跟踪打开Theme.Shelvesandroid:theme="@style/Theme.Shelves"
<style name="Theme.Shelves" parent="android:Theme">
<item name="android:windowBackground">@drawable/background_shelf</item>
<item name="android:windowNoTitle">true</item>
</style>
shelf_panel是一个 只能放一本书的红木架子的图片,整个效果是重复这个红木布满全局。Amazing!<bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/shelf_panel" android:tileMode="repeat" />
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
好啦,Eclipse自动帮我们进入ShelvesActivity了,ctrl-j oncreate,定位到onCreate()函数(主函数)看看主体代码。android:name=".activity.ShelvesActivity"
先来做如下猜测:setContentView(R.layout.screen_shelves);
.....省略对书架view的介绍N行org.curiouscreature.android.shelves.view.ShelvesView
可想而知 ,数据的读取在这个函数中进行,仔细查看。setupViews();
F3 BooksAdapter(this) 该类继承自CursorAdapterfinal BooksAdapter adapter = new BooksAdapter(this);
追踪CursorAdapter查看对数据的处理super(activity, activity.managedQuery(BooksStore.Book.CONTENT_URI, PROJECTION_IDS_AND_TITLE, null, null, BooksStore.Book.DEFAULT_SORT_ORDER), true);
Uri.parse("content://shelves/books");
该段代码在开发者社区中的解释是requestLayout();
判断每个网格的效果是事先定义好的To intiate a layout, call
requestLayout()
. This method is typically called by a view on itself whenit believes that is can no longer fit within its current bounds.
....setContentView(com.android.internal.R.layout.preference_list_content)
查看ShelvesView_shelfBackgroud,打开res/values/attrs.xmla.getResourceId(R.styleable.ShelvesView_shelfBackground, 0);
实际获取背景图的方法是shelvesView类中的load()这里载入了视图的背景。<declare-styleable name="ShelvesView"> <attr name="shelfBackground" format="reference" /> </declare-styleable>
而视图的文字,即书名在何处加载,判断是跟此处的布局有关,尝试从xml布局文件出发,找到所需的文字。
使用的自定义视图BubbleTextVieworg.curiouscreature.android.shelves.view.BubbleTextView