日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 系統 > Android > 正文

android書架效果實現原理與代碼

2020-04-11 12:37:17
字體:
來源:轉載
供稿:網友
以前也模仿者ireader實現了書架的效果,但是那種是使用listview實現的,并不好用。絕大多數都是用gridview實現的,網上這方面資料比較少,有些開源的電子書都是重點做了閱讀,并沒有像ireader和QQ閱讀這樣的書架效果。

書架這種效果我早就實現了,本來想做一個完美的電子書,但是因為自己的懶惰,僅僅持續了一兩天,今天又找到了以前的代碼分享出來,希望大家能一起實現一個比較完美的開源的電子書。廢話不多說先看下效果:
 
本地部分還沒有做,做好以后就可以吧本地的書加載到書架里了,這只是一個開始,后面還有很多復雜的沒有做。
下面先看一下書架的實現原理吧!
首先看一下layout下的布局文件main.xml
復制代碼 代碼如下:

<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<includelayout="@layout/head"android:id="@+id/head"/>
<cn.com.karl.view.MyGridView
android:id="@+id/bookShelf"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/head"
android:cacheColorHint="#00000000"
android:columnWidth="90.0dip"
android:fadingEdge="none"
android:horizontalSpacing="5dp"
android:listSelector="#00000000"
android:numColumns="3"
android:scrollbars="none"
android:verticalSpacing="20dp"/>

<SlidingDrawer
android:id="@+id/sliding"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:content="@+id/allApps"
android:handle="@+id/imageViewIcon"
android:orientation="vertical">

<Button
android:id="@+id/imageViewIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="本地"
android:textSize="18dp"
android:background="@drawable/btn_local"/>
<GridView
android:id="@+id/allApps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/file_list_bg"
android:columnWidth="60dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:padding="10dp"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"/>
</SlidingDrawer>
</RelativeLayout>

上面是個自定義的gridview主要來實現書架,因為每一本書是一個item,在自定義的gridview中計算每一行的高度,然后把書架畫上去。下面是個抽屜。
復制代碼 代碼如下:

publicclassMyGridViewextendsGridView{
privateBitmapbackground;
publicMyGridView(Contextcontext,AttributeSetattrs){
super(context,attrs);
background=BitmapFactory.decodeResource(getResources(),
R.drawable.bookshelf_layer_center);
}
@Override
protectedvoiddispatchDraw(Canvascanvas){
intcount=getChildCount();
inttop=count>0?getChildAt(0).getTop():0;
intbackgroundWidth=background.getWidth();
intbackgroundHeight=background.getHeight()+2;
intwidth=getWidth();
intheight=getHeight();
for(inty=top;y<height;y+=backgroundHeight){
for(intx=0;x<width;x+=backgroundWidth){
canvas.drawBitmap(background,x,y,null);
}
}
super.dispatchDraw(canvas);
}
}

上面就是自定義書架的gridview,也是實現書架最核心的方法。
然后是每一個item的布局:
復制代碼 代碼如下:

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_height="110dp"
android:layout_width="90dp"
android:layout_marginTop="10dp"
android:background="@drawable/cover_txt"
android:id="@+id/imageView1"
android:text="天龍八部"
android:padding="15dp"
android:textColor="#000000"
/>
</LinearLayout>

最后就可以在主activity中顯示出來了。
復制代碼 代碼如下:

publicclassBookShelfActivityextendsBaseActivity{
privateGridViewbookShelf;
privateint[]data={
R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,
R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,
R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,
R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,
R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,
R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,
R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,
R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt,R.drawable.cover_txt

};
privateString[]name={
"天龍八部","搜神記","水滸傳","黑道悲情"
};
privateGridViewgv;
privateSlidingDrawersd;
privateButtoniv;
privateList<ResolveInfo>apps;
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
bookShelf=(GridView)findViewById(R.id.bookShelf);
ShlefAdapteradapter=newShlefAdapter();
bookShelf.setAdapter(adapter);
bookShelf.setOnItemClickListener(newOnItemClickListener(){
@Override
publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,
longarg3){
//TODOAuto-generatedmethodstub
if(arg2>=data.length){

}else{
Toast.makeText(getApplicationContext(),""+arg2,Toast.LENGTH_SHORT).show();
}
}
});
loadApps();
gv=(GridView)findViewById(R.id.allApps);
sd=(SlidingDrawer)findViewById(R.id.sliding);
iv=(Button)findViewById(R.id.imageViewIcon);
gv.setAdapter(newGridAdapter());
sd.setOnDrawerOpenListener(newSlidingDrawer.OnDrawerOpenListener()//開抽屜
{
@Override
publicvoidonDrawerOpened(){
iv.setText("返回");
iv.setBackgroundResource(R.drawable.btn_local);//響應開抽屜事件
//,把圖片設為向下的
}
});
sd.setOnDrawerCloseListener(newSlidingDrawer.OnDrawerCloseListener(){
@Override
publicvoidonDrawerClosed(){
iv.setText("本地");
iv.setBackgroundResource(R.drawable.btn_local);//響應關抽屜事件
}
});
}
classShlefAdapterextendsBaseAdapter{
@Override
publicintgetCount(){
//TODOAuto-generatedmethodstub
returndata.length+5;
}
@Override
publicObjectgetItem(intarg0){
//TODOAuto-generatedmethodstub
returnarg0;
}
@Override
publiclonggetItemId(intarg0){
//TODOAuto-generatedmethodstub
returnarg0;
}
@Override
publicViewgetView(intposition,ViewcontentView,ViewGrouparg2){
//TODOAuto-generatedmethodstub

contentView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item1,null);

TextViewview=(TextView)contentView.findViewById(R.id.imageView1);
if(data.length>position){
if(position<name.length){
view.setText(name[position]);
}
view.setBackgroundResource(data[position]);
}else{
view.setBackgroundResource(data[0]);
view.setClickable(false);
view.setVisibility(View.INVISIBLE);
}
returncontentView;
}

}
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
//TODOAuto-generatedmethodstub
if(keyCode==KeyEvent.KEYCODE_BACK){
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setMessage("你確定退出嗎?")
.setCancelable(false)
.setPositiveButton("確定",
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,
intid){
finish();
}
})
.setNegativeButton("返回",
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,
intid){
dialog.cancel();
}
});
AlertDialogalert=builder.create();
alert.show();
returntrue;
}
returnsuper.onKeyDown(keyCode,event);
}
privatevoidloadApps(){
Intentintent=newIntent(Intent.ACTION_MAIN,null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
apps=getPackageManager().queryIntentActivities(intent,0);
}
publicclassGridAdapterextendsBaseAdapter{
publicGridAdapter(){
}
publicintgetCount(){
//TODOAuto-generatedmethodstub
returnapps.size();
}
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returnapps.get(position);
}
publiclonggetItemId(intposition){
//TODOAuto-generatedmethodstub
returnposition;
}
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
//TODOAuto-generatedmethodstub
ImageViewimageView=null;
if(convertView==null){
imageView=newImageView(BookShelfActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(newGridView.LayoutParams(50,50));
}else{
imageView=(ImageView)convertView;
}
ResolveInfori=apps.get(position);
imageView.setImageDrawable(ri.activityInfo
.loadIcon(getPackageManager()));
returnimageView;
}
}
}

代碼寫的有點亂,有待整理下,哈哈。
上面只是一個畫龍點睛的作用,真要實現一個好的電子書,后面還有跟多的工作,也希望有興趣的朋友能在此基礎上實現一個完美的電子書,然后把源代碼開放,這樣我就不用在往下做了,嘎嘎。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
伊人网站在线| 欧美日韩中文另类| 日韩专区中文字幕| 蜜桃精品在线| 日韩在线观看视频一区| 中文字幕日韩高清| 免费视频二区| 精品人妻一区二区三区视频| 欧美日韩国产不卡| 中文在线一区二区| 亚洲一区视频在线观看视频| 精品国产1区2区3区| 国产成人精品日本亚洲专区61| 日韩欧美专区在线| 不卡一区2区| 国产91久久久久| 一级片免费在线| 国产丝袜一区| 91久久精品国产| 久久久91精品国产| 日韩欧美中文字幕视频| 国产绿帽一区二区三区| 国产三级做爰在线观看| 在线视频一区二区三区在线播放| 99日韩精品| 精品播放一区二区| 狠狠色噜噜狠狠狠狠97| 中文字幕日韩欧美在线| 中文字幕亚洲区| 国产不卡一区二区在线观看| 91精品在线观看视频| 欧美国产综合视频| 国产三级视频在线播放线观看| 国产www.大片在线| 国产婷婷色一区二区三区| 久久精品人妻一区二区三区| 美女在线视频一区| 日韩字幕在线观看| 在线国产99| 亚洲免费中文字幕| 国产高清大尺度一区二区不卡| 亚洲成年人影院在线| 一本久久a久久精品亚洲| 欧美日韩性视频一区二区三区 | 欧美日韩国产专区| 国产永久免费高清在线观看| 亚洲乱码中文字幕| 欧美日韩亚洲一区| 日韩欧美中文| 国产福利在线播放| 国产乱码在线观看| 欧美日韩不卡在线视频| 国产一区在线精品| 欧美日韩亚洲不卡| 亚洲日本欧美日韩高观看| 亚洲国产福利| 国产激情99| 久久99久久99精品中文字幕| 欧美久久一二三四区| 精品亚洲国内自在自线福利| 蜜桃久久av一区| 中文精品在线| 视频一区中文字幕国产| 日韩午夜黄色| 久久麻豆视频| 一区二区三区在线不卡| 欧美日韩成人一区二区| 一区二区三区精品在线| 精品成人久久av| 久久久综合精品| 一区二区精品| 中文字幕日韩在线观看| 日韩va亚洲va欧洲va国产| 亚洲乱码中文字幕| 国产小视频在线观看免费| 樱花草www在线| 在线一区二区不卡| 99精品电影| 亚洲成在线观看| 欧美日韩一级片在线观看| 久久久99免费| 欧美日韩国产成人| 中文字幕高清在线播放| 精品国产欧美| 国产999在线观看| 国产一级粉嫩xxxx| 国产成人精品综合网站| 欧美亚洲国产日韩| 欧美在线视频第一页| 日韩欧美中文字幕一区| 国产欧美日韩中文字幕在线| 日韩欧美国产1| 中文字幕精品视频在线| 精品国产91乱高清在线观看| a√免费观看在线网址www| 亚洲视频中文字幕| 久久香蕉精品| 国产永久在线观看| 国产欧美久久久精品免费| 欧美片网站免费| 国产在线一区二区视频| 亚洲免费观看视频| 亚洲视频色图| 日韩在线视频免费观看| 中文字幕在线视频久| 国产嫩草影院久久久久| 日韩免费视频| 激情国产在线| 欧美日韩亚洲国内综合网俺| 国产欧美日韩成人| 91久久精品国产91性色69| 久久久精品日韩欧美| 精品无人国产偷自产在线| 一区二区三区在线|网站| 欧美日韩综合在线观看| 91精品国产综合久久香蕉的特点 | 欧美 日韩 国产在线| 日韩视频在线一区二区| 日韩午夜一区| 日韩专区视频网站| 国产在线日韩精品| 精品日韩av| 日本啊v在线| 精品国产99| 国产一区不卡在线| 91精品国产色综合久久久蜜香臀| 国产乱国产乱300精品| 999视频精品| 国产福利免费在线观看| 欧美三级一区二区三区| 欧美日韩国产在线看| 精品九九久久| 中文字幕亚洲视频| 色猫猫国产区一区二在线视频| 色欧美日韩亚洲| 国产精久久久久| 亚洲国产福利| 一二三区精品福利视频| 日韩欧美不卡在线| 国产黄在线看| 亚洲一级网站| 日韩一级二级三级| 亚洲第一视频| 亚洲福利精品| 日韩视频专区| 亚洲男女av一区二区| 久久99精品国产| 欧美熟妇乱码在线一区| 97久久精品| 欧美婷婷精品激情| 欧美天堂一区二区| 国产免费不卡av| 日韩专区视频网站| 国产最新在线| 欧美一级欧美三级在线观看| 国产男女av| 日韩一级在线免费观看| 91午夜在线| 99视频在线看| 亚洲大片精品永久免费| 最近免费中文字幕在线第一页| 日韩欧美三级在线| 国产男女av| 国产不卡的av| 日韩中文字幕视频在线| 国产真实乱子伦精品视频| 日韩在线视频精品| 成人一区二区不卡免费| 国产在线欧美日韩| 国产高清在线一区| 亚洲一区视频在线观看视频| 在线视频国产三级| 丰满少妇一区二区| 亚洲免费福利视频| 精品福利二区三区| 在线日韩中文字幕| 精品乱人伦一区二区三区| 在线观看国产福利视频| 国产黄色网页| 国产高清在线视频| 国产一区久久| 国产高清精品二区| 精品播放一区二区| 在线视频国内一区二区| 精品福利二区三区| 久久久99精品久久| 91精品国产综合久久蜜臀| 欧美日韩成人综合| 日韩中文字幕网| 欧美色视频一区二区三区在线观看| 欧美中文字幕视频| 国产性一级片| 中文字幕久精品免费视频| 日韩视频免费直播| aaa欧美日韩| 一区二区在线观| 亚洲免费在线观看av| 视频一区二区国产| 日韩在线三区| 在线日韩中文| 日韩欧美亚洲日产国| 香蕉人人精品| 久久精品国产视频| 99热最新网址| 亚洲成av人片| 韩日中文字幕第一页| 中文字幕精品在线| 顶级网黄在线播放| 一区二区三区精品在线观看| 午夜私人影院在线观看| 精品国产欧美| 天堂在线www天堂中文在线| 国产欧美日韩在线看| 黄色国产网站在线观看| 国产亚洲污的网站| 欧美日韩性视频一区二区三区| 国产v日产∨综合v精品视频| 先锋男人资源站| 91精品免费在线观看| 高清1区2区| 欧美一级免费看| 国产欧美综合在线观看第十页 | 拍真实国产伦偷精品| 日韩欧美中文在线| 91久久中文| 在线视频色在线| 国产天堂素人系列在线视频| 欧美三级中文字幕在线观看| 欧美黄页在线免费观看| 91九色在线看| 国产极品嫩模在线视频一区 | 欧美日韩在线精品成人综合网| 欧美三级中文字幕在线观看| 国产在线不卡一区| 亚洲福利精品在线| 日韩你懂的电影在线观看| 日韩在线精品| 久久人人88| 亚洲福利在线视频| 中文字幕亚洲字幕| 91精品久久久久久久91蜜桃| 欧美在线亚洲一区| 午夜国产视频| 91xxx在线观看| av免费在线观看网址| 在线观看免费国产成人软件| 欧美日韩在线视频免费观看| 中文字幕在线导航| 最近高清中文在线字幕在线观看1| 伊人永久在线| 国产一区 二区 三区一级| 一区二区三区在线播| 国产拍揄自揄精品视频麻豆| 91久久大香伊蕉在人线| 久久精品人妻一区二区三区| 正在播放日韩精品| 国产丝袜一区二区| 国产日韩av高清| 蜜桃视频一日韩欧美专区| 欧美日韩在线播放视频| 欧美日韩亚洲91| 中文字幕一区二区三区精品| 欧美.日韩.国产.一区.二区| 一级特黄大欧美久久久| 青青久在线视频免费观看| 999精品色在线播放| 欧美日韩精品在线视频| 国产激情99| 91精品国产综合久久久久| lutube成人福利在线观看| 中文字幕国产日韩| 国产95在线|亚洲| 在线综合 亚洲 欧美中文字幕| a√免费观看在线网址www| 亚洲免费福利视频| 国产一级免费在线观看| 欧美日韩国产一区在线| 亚洲男人在线| 先锋男人资源站| 欧美另类久久久品| 日韩欧美资源站| 国产三级视频在线| 日韩一级在线免费观看| 中文字幕久精品免费视频| 免费国产h视频在线观看86| 在线观看91精品国产入口| aaa欧美日韩| 日韩精品福利一区二区三区| 欧美 日韩 中文字幕| 欧美日韩高清一区二区| 国产欧美综合在线| 中文在线不卡视频| 日韩精品视频在线看| 在线视频色在线| 精品av中文字幕在线毛片| 999在线视频| 日韩欧美综合| 欧美日韩一二三四| 免费视频一区三区| 日韩美女视频一区二区在线观看| 91精品国产调教在线观看| 久久精品不卡| 国产婷婷色一区二区三区在线| 中文字幕亚洲二区| 国产高清精品在线| 日韩欧美999| 国产乱国产乱老熟300部视频| 日韩精品综合在线| 亚洲福利精品视频| 在线一区av| 亚洲区中文字幕| 欧美亚洲免费高清在线观看| 欧美日韩在线视频免费观看 | 国内不卡的二区三区中文字幕| 深夜日韩欧美| 亚洲第一福利视频在线| 99精品999| 日韩视频在线一区二区| 色综合久久88色综合天天免费| 精品激情国产视频| 精品视频久久| 极品久久久久久| 国产高清精品二区| 久久久久久欧美| 成人福利一区| 日本熟女一区二区| 中文av字幕一区| 日韩在线二区| 中文网丁香综合网| 日韩在线视频精品| 日本不卡免费高清视频| 中文精品电影| 欧美wwww| 欧美国产日韩在线播放| 欧美日韩一级视频| 国产一卡2卡3卡4卡网站免费| 亚洲黄色www| √天堂资源中文www| 欧美一卡2卡三卡4卡5免费| 免费日韩精品中文字幕视频在线| 国产在线欧美日韩| 欧美日韩高清一区二区| 一区三区二区视频| 深夜福利亚洲| 中文在线视频| 午夜国产福利一区二区| 午夜伊人狠狠久久| 亚洲视频中文字幕| 中文字幕日韩在线观看| 久久精品国产成人一区二区三区| 国产三级视频在线| 国产在线导航| 国产福利在线看| 亚洲欧洲国产视频| 欧洲精品二区| 粉嫩粉嫩芽的虎白女18在线视频| 欧美婷婷久久| 精品中文在线| 欧美日韩亚洲不卡| 一区二区不卡久久精品| 欧美三级在线视频| 99精品一级欧美片免费播放| 亚洲一区在线观看视频| 午夜av一区二区| 91精品国产乱码久久蜜臀| 亚洲一区不卡在线| 亚洲中文字幕在线一区| 91精品国产自产在线| 中文字幕精品亚洲| 久久久久蜜桃| 一区视频在线播放| 日韩一级免费在线观看| 中文字幕在线国产| 蜜桃久久av一区| 欧美日韩国产123区| 精品欧美日韩在线| 一区免费在线| 91精品久久久久久蜜臀| 午夜一区二区三区| 欧美亚洲另类制服自拍| 国产欧美日韩在线视频| 91精品国产日韩91久久久久久| 一区二区三区视频网站| 久精品在线观看| 亚洲高清视频在线| 日本中文字幕在线观看| 亚洲综合在线中文字幕| 国产在线看一区| 午夜黄色小视频| 欧美黄页在线免费观看| 91精品国产丝袜白色高跟鞋| 欧美不卡视频一区发布| 91精品国产自产观看在线| 日本熟女一区二区| 亚洲成在线观看| 欧美三级日韩三级| 欧美中文字幕视频| 国产 欧美 在线| 欧美日韩在线不卡| 亚洲高清视频一区|