android书架效果 .
来源:互联网 发布:老时时彩计划软件 编辑:程序博客网 时间:2024/05/20 07:32
以前也模仿者ireader实现了书架的效果,但是那种是使用listview实现的,并不好用。绝大多数都是用gridview实现的,网上这方面资料比较少,有些开源的电子书都是重点做了阅读,并没有像ireader和QQ阅读这样的书架效果。
书架这种效果我早就实现了,本来想做一个完美的电子书,但是因为自己的懒惰,仅仅持续了一两天,今天又找到了以前的代码分享出来,希望大家能一起实现一个比较完美的开源的电子书。废话不多说先看下效果:
本地部分还没有做,做好以后就可以吧本地的书加载到书架里了,这只是一个开始,后面还有很多复杂的没有做。
下面先看一下书架的实现原理吧!
首先看一下layout下的布局文件main.xml
- <?xml version="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"
- >
- <include layout="@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中计算每一行的高度,然后把书架画上去。下面是个抽屉。
- public class MyGridView extends GridView {
- private Bitmap background;
- public MyGridView(Context context, AttributeSet attrs) {
- super(context, attrs);
- background = BitmapFactory.decodeResource(getResources(),
- R.drawable.bookshelf_layer_center);
- }
- @Override
- protected void dispatchDraw(Canvas canvas) {
- int count = getChildCount();
- int top = count > 0 ? getChildAt(0).getTop() : 0;
- int backgroundWidth = background.getWidth();
- int backgroundHeight = background.getHeight()+2;
- int width = getWidth();
- int height = getHeight();
- for (int y = top; y < height; y += backgroundHeight) {
- for (int x = 0; x < width; x += backgroundWidth) {
- canvas.drawBitmap(background, x, y, null);
- }
- }
- super.dispatchDraw(canvas);
- }
- }
上面就是自定义书架的gridview,也是实现书架最核心的方法。
然后是每一个item的布局:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns: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中显示出来了。
- public class BookShelfActivity extends BaseActivity {
- private GridView bookShelf;
- private int[] 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
- };
- private String[] name={
- "天龙八部","搜神记","水浒传","黑道悲情"
- };
- private GridView gv;
- private SlidingDrawer sd;
- private Button iv;
- private List<ResolveInfo> apps;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.main);
- bookShelf = (GridView) findViewById(R.id.bookShelf);
- ShlefAdapter adapter=new ShlefAdapter();
- bookShelf.setAdapter(adapter);
- bookShelf.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- // TODO Auto-generated method stub
- 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(new GridAdapter());
- sd.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener()// 开抽屉
- {
- @Override
- public void onDrawerOpened() {
- iv.setText("返回");
- iv.setBackgroundResource(R.drawable.btn_local);// 响应开抽屉事件
- // ,把图片设为向下的
- }
- });
- sd.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
- @Override
- public void onDrawerClosed() {
- iv.setText("本地");
- iv.setBackgroundResource(R.drawable.btn_local);// 响应关抽屉事件
- }
- });
- }
- class ShlefAdapter extends BaseAdapter{
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return data.length+5;
- }
- @Override
- public Object getItem(int arg0) {
- // TODO Auto-generated method stub
- return arg0;
- }
- @Override
- public long getItemId(int arg0) {
- // TODO Auto-generated method stub
- return arg0;
- }
- @Override
- public View getView(int position, View contentView, ViewGroup arg2) {
- // TODO Auto-generated method stub
- contentView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item1, null);
- TextView view=(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);
- }
- return contentView;
- }
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // TODO Auto-generated method stub
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setMessage("你确定退出吗?")
- .setCancelable(false)
- .setPositiveButton("确定",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int id) {
- finish();
- }
- })
- .setNegativeButton("返回",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int id) {
- dialog.cancel();
- }
- });
- AlertDialog alert = builder.create();
- alert.show();
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
- private void loadApps() {
- Intent intent = new Intent(Intent.ACTION_MAIN, null);
- intent.addCategory(Intent.CATEGORY_LAUNCHER);
- apps = getPackageManager().queryIntentActivities(intent, 0);
- }
- public class GridAdapter extends BaseAdapter {
- public GridAdapter() {
- }
- public int getCount() {
- // TODO Auto-generated method stub
- return apps.size();
- }
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return apps.get(position);
- }
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- ImageView imageView = null;
- if (convertView == null) {
- imageView = new ImageView(BookShelfActivity.this);
- imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
- imageView.setLayoutParams(new GridView.LayoutParams(50, 50));
- } else {
- imageView = (ImageView) convertView;
- }
- ResolveInfo ri = apps.get(position);
- imageView.setImageDrawable(ri.activityInfo
- .loadIcon(getPackageManager()));
- return imageView;
- }
- }
- }
代码写的有点乱,有待整理下,哈哈。
上面只是一个画龙点睛的作用,真要实现一个好的电子书,后面还有跟多的工作,也希望有兴趣的朋友能在此基础上实现一个完美的电子书,然后把源代码开放,这样我就不用在往下做了,嘎嘎。
最后附上源码下载地址:点击打开链接
0 0
- android书架效果
- android 书架效果实现
- android书架效果
- android书架效果 .
- android书架效果背景图处理
- Android中GridView的书架效果实现
- android书架效果,可以触底刷新
- Android开发之抽屉效果及ireader书架效果--SlidingDrawer
- NewsStand书架效果
- NewsStand书架效果(精选)
- 高仿iReader书架效果
- 高仿iReader书架效果
- 高仿iReader书架效果
- ANDROID 开源书架
- android view增加点击效果,如:iReader书架书籍点击变暗
- 书架
- 书架
- 书架
- NoSQL数据库之Redis数据库管理三(list类型)
- 衍射极限、MTF与相机分辨率(1)
- strrchr函数的实现
- mllib:Exception in thread "main" org.apache.spark.SparkException: Input validation failed.
- UINavigationController使用详解
- android书架效果 .
- 只保留一个对象空间——静态方法调用私有构造方法
- 判断奇偶交替
- 2-20
- NYOJ 32 组合数 另一个方向的深搜
- 数据库第三次实验内容
- 多视图的切换
- java蓝桥笔记1、BigDecimal,BigInteger,Calendar,GregorianCalendar,ArrayList,List,Vector,Stack,Scanner,Array
- 实模式,保护模式,虚拟8086模