ITPub博客

首页 > 应用开发 > IT综合 > 小说书架页面,是阅读程序源码的主要功能之一

小说书架页面,是阅读程序源码的主要功能之一

IT综合 作者:云豹科技阿星 时间:2021-11-30 17:05:58 0 删除 编辑

一、基本思路

阅读程序源码的书架界面,实际上就是一个自定义的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="
    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="
    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里面实现点击事件就行了,

说明:这些代码基于网上的蝌蚪听书神器改写

声明:本文由云豹科技转发自我可能在扯淡博客,如有侵权请联系作者删除


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69982461/viewspace-2844962/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-08-24

  • 博文量
    239
  • 访问量
    81622