Android爱读app开发记录之二---书架界面

一、基本思路

书架界面实际上就是一个自定义的GridView ,然后给相应的控件设置相应的事件就可以了。比如给书籍(item)设置点击和长按事件,导入按钮设置点击事件...

二、自定义GridView

MyGradiView.java
package com.xiaoli.util;



import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.GridView;

import com.hck.LoverReader.R;

public class MyGridView extends GridView {

   public static Bitmap background;

   public MyGridView(Context context, AttributeSet attrs) {
      super(context, attrs);
      background = BitmapFactory.decodeResource(getResources(),
            R.drawable.shelf_background2);
   }
   public void setBackground(int drawable){
      background= BitmapFactory.decodeResource(getResources(),
            drawable);
   }
   @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();
      //Bitmap bitmap=Bitmap.createScaledBitmap(background, MyTool.getWidth(), MyTool.getHight()/8, true);
      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);
   }

}
设配器
class ShlefAdapter extends BaseAdapter{

			@Override
			public int getCount() {
				return listItem.size();
			}

			@Override
			public Object getItem(int arg0) {
				return arg0;
			}

			@Override
			public long getItemId(int arg0) {
				return arg0;
			}

			@Override
			public View getView(int position, View contentView, ViewGroup arg2) {
				
				contentView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item1, null);
				//文字
				TextView view=(TextView) contentView.findViewById(R.id.imageView1);
				view.setText(listItem.get(position).get("BookName").toString());
				//图片
				ImageView image1 =(ImageView)contentView.findViewById(R.id.image);
				if(position==0){
					image1.setImageResource(R.drawable.cover_txt0);
				} else if(position==1){
					image1.setImageResource(R.drawable.cover_txt1);
				}else{
					image1.setImageResource(R.drawable.cover);
				}
				return contentView;
			}
	    }
每一项显示的布局item1.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/image"
        android:layout_width="90dp"
        android:layout_height="120dp"
        android:layout_gravity="center"
        android:layout_marginLeft="6dp"
        android:layout_marginTop="10dp"
        android:scaleType="fitXY"
        android:src="@drawable/cover_txt0" />

    <TextView
        android:id="@+id/imageView1"
        android:layout_width="85dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="3dp"
        android:layout_marginTop="15dp"
        android:background="@drawable/text_title_shap"
        android:ellipsize="middle"
        android:gravity="center"
        android:padding="2dp"
        android:singleLine="true"
        android:textColor="#FFFFFF"
        android:textSize="16sp"
        android:textStyle="bold" />
</FrameLayout>
效果图


然后是主布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
<include layout="@layout/head" android:id="@+id/head"/>
  <com.xiaoli.util.MyGridView
       android:gravity="center"
       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="10dp" />
    <!-- 点击按钮弹出菜单 -->
  <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true"
      android:layout_alignParentLeft="true"
      android:layout_marginBottom="18dp"
      android:background="@drawable/button_shape_selector"
      android:onClick="OnOpenMenu"
     android:textColor="@color/bg"
      android:text="功能"/>
</RelativeLayout>
效果图

最后在网格视图中添加数据库存储的数据,就可以有书籍的效果了
相关代码
public void getDate() {
   SQLiteDatabase db = localbook.getReadableDatabase();
   String col[] = { "path" };
   Cursor cur = db.query(FinalDate.DATABASE_TABKE, col, "type=1", null, null, null, null);
   Cursor cur1 = db.query(FinalDate.DATABASE_TABKE, col, "type=2", null, null, null, null);
   Integer num = cur.getCount();
   Integer num1 = cur1.getCount();
   Log.i("hck", "booklistActivity2 :"+num);
   Log.i("hck", "booklistActivity2 :"+num1);
   ArrayList<String> arraylist = new ArrayList<String>();
   while (cur1.moveToNext()) {
      String s = cur1.getString(cur1.getColumnIndex("path"));
      arraylist.add(s);
   }
   while (cur.moveToNext()) {
      String s = cur.getString(cur.getColumnIndex("path"));
      arraylist.add(s);
   }
   db.close();
   cur.close();
   cur1.close();
   if (listItem == null)
      listItem = new ArrayList<HashMap<String, Object>>();
   listItem.clear();
   String[] bookids = getResources().getStringArray(R.array.bookid);
   String[] booknames = getResources().getStringArray(R.array.bookname);
   String[] bookauthors = getResources().getStringArray(R.array.bookauthor);
   Map<String, String[]> maps = new HashMap<String, String[]>();
   for (int i = 0; i < bookids.length; i++) {
      String[] value = new String[2];
      value[0] = booknames[i];
      value[1] = bookauthors[i];
      maps.put(bookids[i], value);
   }
   for (int i = 0; i < num + num1; i++) {
      if (i < num1) {
         File file1 = new File(arraylist.get(i));
         String m = file1.getName().substring(0, file1.getName().length() - 4);
         if (m.length() > 8) {
            m = m.substring(0, 8) + "...";
         }
         String id = arraylist.get(i).substring(arraylist.get(i).lastIndexOf("/") + 1);
         String[] array = maps.get(id);
         String auther = array != null && array[1] == null ? "未知" : array[1];
         String name = array[0] == null ? m : array[0];
         map = new HashMap<String, Object>();

         if (i == 0) {
            map.put("itemback", R.drawable.itemback);
         } else if ((i % 2) == 0) {
            map.put("itemback", R.drawable.itemback);
         }
         map.put("ItemImage", map2 != null ? map2.get(file1.getName())[0] : R.drawable.cover);
         map.put("BookName", name == null ? m : name);
         map.put("ItemTitle1", "作者:" + auther);
         map.put("LastImage", "推荐书目");
         map.put("path", file1.getPath());
         map.put("com", 0 + file1.getName());// 单独用于排序
         listItem.add(map);
         Log.i("hck","本地"+ listItem.size()+"size");
      } else {
         map = new HashMap<String, Object>();

         File file1 = new File(arraylist.get(i));
         String m = file1.getName().substring(0, file1.getName().length() - 4);
         if (m.length() > 8) {
            m = m.substring(0, 8) + "...";
         }
         if (i == 0) {
            map.put("itemback", R.drawable.itemback);
         } else if ((i % 2) == 0) {
            map.put("itemback", R.drawable.itemback);
         }
         map.put("ItemImage", R.drawable.cover);
         map.put("BookName", m);
         map.put("ItemTitle", m);
         map.put("ItemTitle1", "作者:未知");
         map.put("LastImage", "本地导入");
         map.put("path", file1.getPath());
         map.put("com", "1");
         listItem.add(map);
         
      }
   }
   Collections.sort(listItem, new PinyinListComparator());
// if (adapter == null) {
      adapter = new ShlefAdapter();
      toolbarGrid.setAdapter(adapter);
// }
// adapter.notifyDataSetChanged();
}
最后效果图


底部的功能是弹出了一个网格菜单,然后在菜单的每一个Item里面实现点击事件就行了,
说明:这些代码基于网上的蝌蚪听书神器改写
本文完!

发布了30 篇原创文章 · 获赞 76 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/a1275302036/article/details/64169646