Suitable for android development. It is a simple chat software, including knowledge points, application of various controls (ExpandableListView, ViewPager, Spinner, LinearLayout, RelativeLayot), custom ViaImageView (custom xml properties), writing, reading and other operations of SQL.
1.
package ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; /** * Created by FarinaZhang on 2016/5/25. */ public class ViaImageView extends ImageView { private int shapeType=-1; private int borderWidth=0; //the image 's border width private int borderColor= ; //the image 's border color private boolean useDefaultStyle =false; //draw a common imageview private static final Xfermode MASK_XFERMODE; private int AnimType=-1; //Animation type private int mWidth; //The width of the picture private int mHeight; //The height of the picture static { localMode = .DST_IN; MASK_XFERMODE = new PorterDuffXfermode(localMode); } public static enum Shape {circle,triangle,star,hexagonal,rectangle}; public ViaImageView(Context context){ super(context); init(context, null, 0); } public ViaImageView(Context context, AttributeSet attrs){ super(context, attrs); init(context, attrs, 0); } public ViaImageView(Context context,AttributeSet attrs,int defStyle){ super(context, attrs, defStyle); init(context, attrs, defStyle); } public void init(Context context,AttributeSet attrs,int defStyle){ if(attrs!=null){ TypedArray a = getContext().obtainStyledAttributes( attrs,, defStyle, 0); shapeType = (int)(.viaImage_shapeType,shapeType); borderWidth=(int)(.viaImage_borderWidth,borderWidth); borderColor = (.viaImage_borderColor, borderColor); (); } } /** *External interface *Set the properties of ImageView, including shape, border color, border width **/ public void setImageViewProperty(int shapeType,int width,int color){ = shapeType; = width; = color; postInvalidate(); } public void setImageViewShape(int shapeType){ = shapeType; postInvalidate(); } public void setImageBorderWidth(int width){ = width; postInvalidate(); } public void setImageBorderColor(int color){ = color; postInvalidate(); } /** External interface * Set whether to draw in the default format, normal format */ public void setDrawCommonImage(boolean isCommon){ =isCommon; } @Override protected void onDraw(Canvas canvas){ if(useDefaultStyle){ (canvas); return; } final Drawable localDrawable=getDrawable(); if(localDrawable==null)return; if(localDrawable instanceof NinePatchDrawable)return; mWidth=getWidth(); mHeight=getHeight(); int layer=(0.0f,0.0f,mWidth,mHeight,null,Canvas.ALL_SAVE_FLAG); (0,0,mWidth,mHeight); /*Bind drawable to bitmap() (drawable can only be displayed through bitmap)*/ (canvas); createShapeBitmap(canvas); /*Copy the canvas to layer*/ (layer); if(borderWidth!=0){ drawBorder(canvas); } } private void createShapeBitmap(Canvas canvas){ Paint mypaint; mypaint = new Paint(); (false); (true); (MASK_XFERMODE); localConfig=.ARGB_8888; Bitmap localBitmap=(mWidth,mHeight,localConfig); Canvas localCanvas=new Canvas(localBitmap); Paint localPaint = new Paint(); (true); int padding=borderWidth; int radius = ((mWidth>mHeight)?mHeight:mWidth)/2-padding; switch(shapeType){ case 0://Round; { (mWidth/2,mHeight/2, radius, localPaint); break; } case 1://triangle; { Path path = new Path(); (padding, padding); (mWidth / 2, (float)(mWidth*(degree2Radian(30))-padding)); (mWidth-padding, padding); (); (path, localPaint); break; } case 2://Pentagonal star; { Path path = new Path(); float radian = degree2Radian(36);// 36 is the angle of the five-pointed star float radius_in = (float) (radius * (radian / 2) / Math .cos(radian)); // The radius of the middle pentagon ((float) (radius * (radian / 2)), 0);// This point is the starting point of the polygon ((float) (radius * (radian / 2) + radius_in * (radian)), (float) (radius - radius * (radian / 2))); ((float) (radius * (radian / 2) * 2), (float) (radius - radius * (radian / 2))); ((float) (radius * (radian / 2) + radius_in * (radian / 2)), (float) (radius + radius_in * (radian / 2))); ( (float) (radius * (radian / 2) + radius * (radian)), (float) (radius + radius * (radian))); ((float) (radius * (radian / 2)), (float) (radius + radius_in)); ( (float) (radius * (radian / 2) - radius * (radian)), (float) (radius + radius * (radian))); ((float) (radius * (radian / 2) - radius_in * (radian / 2)), (float) (radius + radius_in * (radian / 2))); (0, (float) (radius - radius * (radian / 2))); ((float) (radius * (radian / 2) - radius_in * (radian)), (float) (radius - radius * (radian / 2))); ();// Make these points form a closed polygon (path, localPaint); break; } case 3://Regular hexagon; { Path path= new Path(); float radian = degree2Radian(30); ((float)(radius*(radian)), 0); ((float)(radius*(radian)+radius), 0); ((float)(2*radius), (float)(radius*(radian)) ); ((float)(radius*(radian)+radius),(float)(2*(radius*(radian)))); ((float)(radius*(radian)),(float)(2*(radius*(radian)))); (0,(float)(radius*(radian))); (); (path,localPaint); break; } default://Square { int realWidth = (mWidth>mHeight)?mHeight:mWidth; int x = padding +(mWidth-realWidth)/2; int y = padding +(mHeight-realWidth)/2; RectF localRectF=new RectF(x, y, realWidth-padding*2, realWidth-padding*2); (localRectF, localPaint); break; } } /*Draw bitmap on canvas*/ (localBitmap,0.0f,0.0f,mypaint); } //Draw border private void drawBorder(Canvas canvas){ Paint localPaint = new Paint(); (borderColor); (); (borderWidth); (true); int radius=((mWidth>mHeight)?mHeight:mWidth)/2-borderWidth/2; int padding = borderWidth/2; switch(shapeType){ case 0://Round; { (mWidth/2, mHeight/2,radius,localPaint); break; } case 1://triangle; { Path path = new Path(); (padding, padding); (mWidth / 2, (float)(mWidth*(degree2Radian(30))-padding)); (mWidth-padding, padding); (); (path, localPaint); break; } case 2://Pentagonal star; { Path path = new Path(); float radian = degree2Radian(36);// 36 is the angle of the five-pointed star float radius_in = (float) (radius * (radian / 2) / Math .cos(radian)); // The radius of the middle pentagon ((float) (radius * (radian / 2)), 0);// This point is the starting point of the polygon ((float) (radius * (radian / 2) + radius_in * (radian)), (float) (radius - radius * (radian / 2))); ((float) (radius * (radian / 2) * 2), (float) (radius - radius * (radian / 2))); ((float) (radius * (radian / 2) + radius_in * (radian / 2)), (float) (radius + radius_in * (radian / 2))); ( (float) (radius * (radian / 2) + radius * (radian)), (float) (radius + radius * (radian))); ((float) (radius * (radian / 2)), (float) (radius + radius_in)); ( (float) (radius * (radian / 2) - radius * (radian)), (float) (radius + radius * (radian))); ((float) (radius * (radian / 2) - radius_in * (radian / 2)), (float) (radius + radius_in * (radian / 2))); (0, (float) (radius - radius * (radian / 2))); ((float) (radius * (radian / 2) - radius_in * (radian)), (float) (radius - radius * (radian / 2))); ();// Make these points form a closed polygon (path, localPaint); break; } case 3://Regular hexagon; { Path path= new Path(); float radian = degree2Radian(30); ((float)(radius*(radian)), 0); ((float)(radius*(radian)+radius), 0); ((float)(2*radius), (float)(radius*(radian)) ); ((float)(radius*(radian)+radius),(float)(2*(radius*(radian)))); ((float)(radius*(radian)),(float)(2*(radius*(radian)))); (0,(float)(radius*(radian))); (); (path,localPaint); break; } default://Square { int realWidth = (mWidth>mHeight)?mHeight:mWidth-borderWidth; int x = padding +(mWidth-realWidth)/2; int y = padding +(mHeight-realWidth)/2; RectF localRectF=new RectF(x, y, realWidth-padding*2, realWidth-padding*2); (localRectF, localPaint); break; } } } //Convert angle to radian private float degree2Radian(int degree) { // TODO Auto-generated method stub return (float) ( * degree / 180); } }
2.
package ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; /** * Created by FarinaZhang on 2016/7/5. */ public class ContactExpendListAdapter extends BaseExpandableListAdapter { private Context mContext; private List<FriendListData> mListData; public ContactExpendListAdapter(Context context, List<FriendListData> data){ mContext = context; mListData = data; } @Override public int getGroupCount(){ return (); } @Override public int getChildrenCount(int groupPosition){ return (groupPosition).getFriendChildList().size(); } @Override public Object getGroup(int groupPosition){ return (groupPosition).getGroupName(); } @Override public Object getChild(int groupPosition, int childPosition){ return (groupPosition).getFriendChildList().get(childPosition); } @Override public long getGroupId(int groupPosition){ return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition){ return childPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent){ groupHolder viewHolder =null; if(convertView == null){ convertView = (mContext).inflate(.contact_list_group, null); viewHolder = new groupHolder(); = (ImageView)(); = (TextView)(.goup_name); (viewHolder); }else{ viewHolder = (groupHolder)(); } ((groupPosition).getGroupName()); if(isExpanded){ (.arrow_down); }else{ (.arrow_up); } return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent){ memberHolder viewHolder = null; if(convertView == null){ convertView = (mContext).inflate(.contact_list_member, null); viewHolder= new memberHolder(); = (ViaImageView) (.member_img); = (TextView)(.member_name); (viewHolder); }else{ viewHolder =(memberHolder)(); } FriendEntity entity= (groupPosition).getFriendChildList().get(childPosition); String icnPath = (); if(icnPath == null||()<=0) { (().getDrawable(.user_img)); } (()); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } @Override public boolean hasStableIds(){ return true; } private class memberHolder{ ViaImageView memberImg; TextView memberName; } private class groupHolder{ ImageView icon; TextView groupName; } }
3.
package ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; /** * Created by FarinaZhang on 2016/7/14. */ public class ChatInfoManager { private Context mContext; private ChatDBhelper mDBHelper; //table user string private final String USER_TABLE_NAME="users"; private final String USER_ID="id"; private final String USER_COUNT_NUMBER="countNumber"; private final String USER_NIKENAME="nikeName"; private final String USER_ICON_PATH="iconPath"; private final String USER_PHONE_NUMBER="phoneNumber"; private final String USER_MAIL_ADDR="mailAddr"; private final String USER_QQ_NUMBER="qqNumber"; private final String USER_WEIXIN_NUMBER="weixinNumber"; //table friends string private final String FRIEND_TABLE_NAME="friends"; private final String FRIEND_ID="id"; private final String FRIEND_HOST_ID="hostId"; private final String FRIEND_GROUP_ID="groupId"; private final String FRIEND_NAME="friendName"; private final String FRIEND_ICON_PATH="iconPath"; private final String FRIEND_BELIVE="beLive"; //table groups string private final String GROUP_TABLE_NAME="groups"; private final String GROUP_ID="id"; private final String GROUP_HOST_ID="hostId"; private final String GROUP_NAME="groupName"; //table messages string private final String MESSAGE_TABLE_NAME="messages"; private final String MESSAGE_ID="id"; private final String MESSAGE_MESSAGE="message"; private final String MESSAGE_FROM_ID="fromId"; private final String MESSAGE_TO_ID="toId"; private final String MESSAGE_READED="readed"; private final String MESSAGE_TYPE="type"; private final String MESSAGE_TIME="time"; public ChatInfoManager(Context context){ mContext = context; mDBHelper = (mContext); } public void addUser(UserEntity user){ SQLiteDatabase db = null; try { db = (); ContentValues values = new ContentValues(); (USER_ID,()); (USER_COUNT_NUMBER,()); (USER_NIKENAME,()); (USER_ICON_PATH,()); (USER_PHONE_NUMBER,()); (USER_MAIL_ADDR,()); (USER_QQ_NUMBER,()); (USER_WEIXIN_NUMBER,()); (USER_TABLE_NAME, null, values); } catch (Exception e) { (); // TODO: handle exception } finally { (); } } public UserEntity getUserData(int index){ UserEntity user= new UserEntity(); SQLiteDatabase db =null; Cursor cursor = null; try { db = (); cursor = (USER_TABLE_NAME, null, USER_ID + "=" + index, null, null, null, null); if (cursor != null) { (index); (((USER_COUNT_NUMBER))); (((USER_NIKENAME))); (((USER_ICON_PATH))); (((USER_PHONE_NUMBER))); (((USER_MAIL_ADDR))); (((USER_QQ_NUMBER))); (((USER_WEIXIN_NUMBER))); } else { return null; } }catch (Exception e){ (); }finally{ (); } return user; } public List<UserEntity> getUserList(){ List<UserEntity> list =new ArrayList<UserEntity>(); SQLiteDatabase db =null; Cursor cursor=null; try{ db=(); cursor=(USER_TABLE_NAME,new String[]{USER_ID,USER_COUNT_NUMBER,USER_NIKENAME,USER_ICON_PATH},null,null,null,null,null); if(cursor!=null){ while (()) { UserEntity user= new UserEntity(); (((USER_ID))); (((USER_COUNT_NUMBER))); (((USER_NIKENAME))); (((USER_ICON_PATH))); (user); } } }catch(Exception e){ (); }finally{ (); } return list; } public void addFriend(FriendEntity friend){ SQLiteDatabase db=null; try{ db=(); if(db==null)return ; ContentValues values = new ContentValues(); (FRIEND_ID,()); (FRIEND_HOST_ID,()); (FRIEND_GROUP_ID,()); (FRIEND_NAME,()); (FRIEND_ICON_PATH,()); (FRIEND_BELIVE,()); (FRIEND_TABLE_NAME,null,values); }catch(Exception e){ (); }finally { (); } } public List<FriendListData> getFriendList(){ SQLiteDatabase db=null; List<FriendListData> friendList=new ArrayList<FriendListData>(); List<GroupEntity> groupList= getGroupList(); try{ db = (); if (db == null) return null; for(int i=0;i<();i++) { FriendListData friendGroup= new FriendListData(); String groupName = (i).getName(); (groupName); List<FriendEntity> groupChild=new ArrayList<FriendEntity>(); Cursor cursor = (FRIEND_TABLE_NAME, null, GROUP_NAME+"="+groupName, null, null, FRIEND_ID + "ASC", null); while (()) { FriendEntity entity = new FriendEntity(); (((FRIEND_ID))); (((FRIEND_GROUP_ID))); (((FRIEND_HOST_ID))); (((FRIEND_NAME))); (((FRIEND_ICON_PATH))); String beLive = ((FRIEND_BELIVE)); (("1")); (entity); } (groupChild); (friendGroup); } }catch(Exception e){ (); }finally { (); } return friendList; } public List<GroupEntity> getGroupList(){ List<GroupEntity> groupList = null; SQLiteDatabase db=null; try{ db= (); Cursor cursor =(GROUP_TABLE_NAME,null,null,null,null,null,null); while(()){ GroupEntity entity =new GroupEntity(); (((GROUP_ID))); (((GROUP_HOST_ID))); (((GROUP_NAME))); (entity); } }catch(Exception e){ (); }finally{ (); } return groupList; } public void addGroupMember(GroupEntity group){ SQLiteDatabase db=null; try{ db=(); ContentValues values=new ContentValues(); (GROUP_ID,()); (GROUP_HOST_ID,()); (GROUP_NAME,()); (GROUP_TABLE_NAME,null,values); }catch(Exception e){ (); }finally { (); } } public List<MessageEntity> getMessageList(String loadId){ List<MessageEntity> list = new ArrayList<MessageEntity>(); SQLiteDatabase db=null; Cursor cursor=null; try{ db=(); cursor=(MESSAGE_TABLE_NAME,null, MESSAGE_FROM_ID+"=?,"+MESSAGE_TO_ID+"=?", new String[]{loadId}, null, loadId,MESSAGE_TIME+"DES",null); while(()){ MessageEntity entity =new MessageEntity(); (((MESSAGE_ID))); (((MESSAGE_FROM_ID))); (((MESSAGE_TO_ID))); (((MESSAGE_MESSAGE))); (((MESSAGE_TYPE))); (((MESSAGE_TIME))); (entity); } }catch (Exception e){ (); }finally{ (); } return list; } public void setMessageItem(MessageEntity message){ SQLiteDatabase db=null; try{ db=(); if(db==null)return; ContentValues values = new ContentValues(); (MESSAGE_ID,()); (MESSAGE_FROM_ID,()); (MESSAGE_TO_ID,()); (MESSAGE_MESSAGE,()); (MESSAGE_TYPE,()); (MESSAGE_TIME,()); (MESSAGE_TABLE_NAME,null,values); }catch(Exception e){ (); }finally { (); } } }
Source codedownloadaddress
The above is all the content of this article. I hope it will be helpful to everyone's study and I hope everyone will support me more.