package com.wyp.materialqqlite; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import android.content.Context; public class FaceList { private List<FaceInfo> m_arrFaceInfo; private List<List<FaceInfo>> m_arrFacePage; private int m_nFaceCntOfOnePage; // 一页显示的表情数 private int m_nPageCnt; // 表情页数 private int m_nDelBtnPicResId; // 删除按钮图片资源ID public FaceList() { m_arrFaceInfo = new ArrayList<FaceInfo>(); m_arrFacePage = new ArrayList<List<FaceInfo>>(); m_nFaceCntOfOnePage = 21; m_nDelBtnPicResId = 0; } public void reset() { m_arrFaceInfo.clear(); for (List<FaceInfo> facePage : m_arrFacePage) { facePage.clear(); } m_arrFacePage.clear(); } public void setDelBtnPicResId(int nResId) { m_nDelBtnPicResId = nResId; } public boolean loadConfigFile(Context context, String strFileName) { try { reset(); InputStream in = context.getResources().getAssets().open(strFileName); BufferedReader buf = new BufferedReader( new InputStreamReader(in, "UTF-8")); String str = null; while ((str = buf.readLine()) != null) { String[] text = str.split(","); if (text.length != 3) continue; FaceInfo faceInfo = new FaceInfo(); faceInfo.m_nId = Integer.parseInt(text[0]); // 表情ID faceInfo.m_strFileName = text[1]; // 表情文件名 faceInfo.m_strTip = text[2]; // 表情提示文字 String fileName = text[1].substring(0, text[1].lastIndexOf(".")); faceInfo.m_nResId = context.getResources().getIdentifier( fileName, "drawable", context.getPackageName()); m_arrFaceInfo.add(faceInfo); } int nFaceCntOfOnePage = m_nFaceCntOfOnePage - 1; if (m_arrFaceInfo.size() % nFaceCntOfOnePage == 0) m_nPageCnt = m_arrFaceInfo.size() / nFaceCntOfOnePage; else m_nPageCnt = m_arrFaceInfo.size() / nFaceCntOfOnePage + 1; FaceInfo faceInfo = new FaceInfo(); // 删除按钮 faceInfo.m_nId = -1; // 表情ID faceInfo.m_strFileName = ""; // 表情文件名 faceInfo.m_strTip = ""; // 表情提示文字 faceInfo.m_nResId = m_nDelBtnPicResId; // 表情资源ID for (int i = 0; i < m_nPageCnt; i++) { List<FaceInfo> facePage = new ArrayList<FaceInfo>(); for (int j = 0; j < nFaceCntOfOnePage; j++) { int nPos = i * nFaceCntOfOnePage + j; if (nPos >= m_arrFaceInfo.size()) break; facePage.add(m_arrFaceInfo.get(nPos)); } facePage.add(faceInfo); m_arrFacePage.add(facePage); } return true; } catch (IOException e) { e.printStackTrace(); } return false; } public int getCount() { return m_arrFaceInfo.size(); } public FaceInfo getFaceInfo(int nIndex) { if (nIndex >= 0 && nIndex < m_arrFaceInfo.size()) return m_arrFaceInfo.get(nIndex); else return null; } public FaceInfo getFaceInfoById(int nFaceId) { for (int i = 0; i < m_arrFaceInfo.size(); i++) { FaceInfo faceInfo = m_arrFaceInfo.get(i); if (faceInfo != null && faceInfo.m_nId == nFaceId) return faceInfo; } return null; } public int getFaceCountOfOnePage() { return m_nFaceCntOfOnePage; } public void setFaceCountOfOnePage(int nFaceCnt) { m_nFaceCntOfOnePage = nFaceCnt; } public int getPageCount() { return m_nPageCnt; } public int getFaceCount(int nPage) { if (nPage >= 0 && nPage < m_arrFaceInfo.size()-1) { return m_nFaceCntOfOnePage; } else if (nPage == m_arrFaceInfo.size()-1) { int nRemainder = m_arrFaceInfo.size() % m_nFaceCntOfOnePage; if (0 == nRemainder) return m_nFaceCntOfOnePage; else return nRemainder; } else { return 0; } } public FaceInfo getFaceInfo(int nPage, int nIndex) { int nPos = nPage * m_nFaceCntOfOnePage + nIndex; if (nPos >= 0 && nPos < m_arrFaceInfo.size()) return m_arrFaceInfo.get(nPos); else return null; } public List<FaceInfo> getFacePage(int nPage) { return m_arrFacePage.get(nPage); } }