又是隔了好一阵子,这次带来的是当时写的一个应用——星座达人,提供一系列的综合服务,也就是脑子一热,就想写个星座题材的应用。
应用截图:
具体的内容,可以下载查看:http://www.anzhi.com/soft_2473845.html
项目工程结构
包com.eric.activity:放置一系列的Activity页面
AboutUsActivity关于页面,简单文本;
AboutUsActivity.java
package com.eric.activity; import com.eric.constellation.R; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; /* *@author Eric *@2015-11-24下午9:57:07 */ public class AboutUsActivity extends Activity{ private LinearLayout layout_title_about; private ImageView image_back; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about_us); layout_title_about = (LinearLayout) findViewById(R.id.layout_about); image_back = (ImageView) findViewById(R.id.image_about_back); layout_title_about.getBackground().setAlpha(70); image_back.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); } }activity_about_us.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background= "@drawable/bg4" > <RelativeLayout android:id="@+id/layout_title_about" android:layout_width="fill_parent" android:layout_height="@dimen/activity_main_title_height" android:layout_alignParentTop="true" android:background="@drawable/title_bg"> <TextView android:id="@+id/text_title_about" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:text="关于" android:textSize="@dimen/activity_main_title_text_size" android:layout_centerInParent="true" android:gravity="center"/> <ImageView android:id="@+id/image_about_back" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:background="@drawable/title_back_up_down" /> </RelativeLayout> <LinearLayout android:id="@+id/layout_about" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:padding="20dp" android:layout_below="@id/layout_title_about" android:background="@drawable/single_up_down" android:layoutAnimation="@anim/layout_animation" android:orientation="vertical"> <ImageView android:layout_width="150dp" android:layout_height="150dp" android:layout_gravity="center_horizontal" android:background="@drawable/aboutus"/> <TextView android:id="@+id/text_about_appname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/app_name" /> <TextView android:id="@+id/text_about_version" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/version_name" /> <TextView android:id="@+id/text_about_author" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/author" /> <TextView android:id="@+id/text_about_mail" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/mail" /> <TextView android:id="@+id/text_about_copyright" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/copyright" /> </LinearLayout> </RelativeLayout>
BottomMenuActivity下方弹出菜单页;
BottomMenuActivity.java自定义的一个下弹页面,当做对话框使用,计算积分,后续没有触发;
package com.eric.activity; import com.eric.constellation.R; import com.eric.test.AppConnect; import com.eric.test.UpdatePointsListener; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; /* *@author Eric *@2015-11-16下午7:25:28 */ public class BottomMenuActivity extends Activity implements OnClickListener,UpdatePointsListener{ private Button btn_next,btn_go; private TextView text,tips; private String info; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bottom_menu); AppConnect.getInstance(this); btn_next = (Button) findViewById(R.id.btn_next); btn_go = (Button) findViewById(R.id.btn_go); text = (TextView) findViewById(R.id.text_point_info); tips = (TextView) findViewById(R.id.text_point_tips); info = "当前星币:"+MainActivity.point+"\n"+"消耗星币:"+MainActivity.cost; text.setText(info); btn_next.setOnClickListener(this); btn_go.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_next: finish(); break; case R.id.btn_go: AppConnect.getInstance(this).showOffers(this); break; } } @Override public void getUpdatePoints(String arg0, int arg1) { MainActivity.point = arg1; } @Override public void getUpdatePointsFailed(String arg0) { } }
BudejieActivity百思不得姐页面,获取图片和文本页面列表,下拉刷新上拉加载;
BudejieActivity.java通过异步加载框架进行请求图片和文本数据并解析Json,头像随机更新列表项;
package com.eric.activity; import java.io.BufferedInputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Random; import org.apache.http.Header; import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONTokener; import com.eric.constellation.R; import com.eric.mygifview.MyGifView; import com.eric.mylistview.MyListener; import com.eric.mylistview.PullToRefreshLayout; import com.loopj.android.http.AsyncHttpResponseHandler; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.eric.budejie.*; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; /* *@author Eric *@2015-11-23上午9:37:45 */ public class BudejieActivity extends Activity{ public ImageLoader imageLoader = ImageLoader.getInstance(); private ListView listView; private Drawable draw; private int currentPage = 1; private int currentList; private String result; private String name,create_time,love,hate, text,type,image0; private ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String,Object>>(); private JSONObject contentObject = null; private MyAdapter adapter; public static MyHandler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_budejie); ((PullToRefreshLayout) findViewById(R.id.refresh_view)) .setOnRefreshListener(new MyListener()); listView = (ListView) findViewById(R.id.content_view); initListView(); } private void initListView() { final AsyncHttpResponseHandler resHandler=new AsyncHttpResponseHandler(){ public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable e) { //做一些异常处理 e.printStackTrace(); Toast.makeText(BudejieActivity.this, "网络异常", 0).show(); } public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { try { //数据解析完添加到ListView //System.out.println("response is :"+new String(responseBody,"utf-8")); result = new String(responseBody,"utf-8"); readJson(result); //System.out.println("解析到的数据:"+dataList); adapter = new MyAdapter(BudejieActivity.this, dataList); listView.setAdapter(adapter); currentList = listView.getCount(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }}; new ShowApiRequest( "http://route.showapi.com/255-1", "12672", "fe08f7b8ae3f4e3cb6855304fe96bbeb") .setResponseHandler(resHandler) .post(); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id){ } }); handler = new MyHandler(); } //解析Json数据 public void readJson(String str){ try { JSONTokener jsonParser = new JSONTokener(str); JSONObject object = (JSONObject) jsonParser.nextValue(); JSONObject bodyObject = object.getJSONObject("showapi_res_body"); JSONObject pageObject = bodyObject.getJSONObject("pagebean"); JSONArray contentArrary = pageObject.getJSONArray("contentlist"); System.out.println("ContentArrary="+contentArrary.length()); for (int i = 0; i < contentArrary.length(); i++) { HashMap<String,Object> map = new HashMap<String,Object>(); contentObject = contentArrary.getJSONObject(i); type = contentObject.getString("type"); name = contentObject.getString("name"); create_time = contentObject.getString("create_time"); love = contentObject.getString("love"); hate = contentObject.getString("hate"); text = contentObject.getString("text"); switch (Integer.parseInt(type)) { case 10://图片 image0 = contentObject.getString("image0"); //is_gif = contentObject.getString("is_gif"); map.put("image0", image0); map.put("name", name); map.put("create_time", create_time); map.put("love", love); map.put("hate", hate); map.put("text", text.trim()); map.put("type", type); dataList.add(map); break; case 29://段子 map.put("name", name); map.put("create_time", create_time); map.put("love", love); map.put("hate", hate); map.put("text", text.trim()); map.put("type", type); dataList.add(map); break; case 31://声音 break; case 41://视频 break; } } } catch (Exception e) { System.out.println("解析Json异常:"+e); } } public class MyAdapter extends BaseAdapter { ArrayList<HashMap<String, Object>> dataList; Context context; public MyAdapter(Context context, ArrayList<HashMap<String, Object>> dataList) { this.context = context; this.dataList = dataList; } @Override public int getCount() { return dataList.size(); } @Override public Object getItem(int position) { return dataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final View view = LayoutInflater.from(context).inflate( R.layout.layout_listview_item, null); String name = (String)dataList.get(position).get("name"); String create_time = (String)dataList.get(position).get("create_time"); String text = (String)dataList.get(position).get("text"); String love = (String)dataList.get(position).get("love"); String hate = (String)dataList.get(position).get("hate"); String type = (String)dataList.get(position).get("type"); switch (Integer.parseInt(type)) { case 10://图片 String image0 = (String)dataList.get(position).get("image0"); String gif = image0.substring(image0.lastIndexOf(".")+1, image0.length()); DisplayImageOptions options=new DisplayImageOptions.Builder() //.showImageOnLoading(R.drawable.v)/*加载图片的时候显示正在加载的图*/ .showImageOnFail(R.drawable.menu_text_icon)/*加载图片失败后显示这个张图*/ .cacheInMemory(true)/*缓存至内存*/ //.cacheOnDisk(true)/*缓存值SDcard*/ .bitmapConfig(Bitmap.Config.RGB_565) .build(); if(gif.equals("gif")){ WebView wv = ((WebView)view.findViewById(R.id.WebView)); wv.setBackgroundColor(0); wv.loadDataWithBaseURL(null,"<HTML><body bgcolor=transparent><div align=center>" + "<IMG src='"+image0+"'/></div></body></html>", "text/html", "UTF-8",null); wv.setVisibility(View.VISIBLE); }else{ ImageView v = ((ImageView)view.findViewById(R.id.image_budejie_content)); imageLoader.init(ImageLoaderConfiguration.createDefault(BudejieActivity.this)); ImageLoader.getInstance().displayImage(image0,v,options); } break; case 29://段子 break; case 31://声音 break; case 41://视频 break; } ((TextView)view.findViewById(R.id.text_name)).setText(name); ((TextView)view.findViewById(R.id.text_create_time)).setText(create_time); ((TextView)view.findViewById(R.id.text_budejie_text)).setText(text); ((TextView)view.findViewById(R.id.text_love)).setText(love); ((TextView)view.findViewById(R.id.text_hate)).setText(hate); ImageView touxiang = (ImageView)view.findViewById(R.id.image_budejie_touxiang); randomDrawable(touxiang); touxiang.setImageDrawable(draw); return view; } } public void randomDrawable(ImageView touxiang){ Random random = new Random(); int n = random.nextInt(12); Resources resourses = this.getResources(); switch (n) { case 0: draw = resourses.getDrawable(R.drawable.view1); break; case 1: draw = resourses.getDrawable(R.drawable.view2); break; case 2: draw = resourses.getDrawable(R.drawable.view3); break; case 3: draw = resourses.getDrawable(R.drawable.view4); break; case 4: draw = resourses.getDrawable(R.drawable.view5); break; case 5: draw = resourses.getDrawable(R.drawable.view6); break; case 6: draw = resourses.getDrawable(R.drawable.view7); break; case 7: draw = resourses.getDrawable(R.drawable.view8); break; case 8: draw = resourses.getDrawable(R.drawable.view9); break; case 9: draw = resourses.getDrawable(R.drawable.view10); break; case 10: draw = resourses.getDrawable(R.drawable.view11); break; case 11: draw = resourses.getDrawable(R.drawable.view12); break; } } public class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.arg1==1){ System.out.println("刷新操作"); final AsyncHttpResponseHandler resHandler1 = new AsyncHttpResponseHandler(){ public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable e) { //做一些异常处理 e.printStackTrace(); Toast.makeText(BudejieActivity.this, "网络异常", 0).show(); } public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { try { //数据解析完添加到ListView //System.out.println("response is :"+new String(responseBody,"utf-8")); result = new String(responseBody,"utf-8"); readJson(result); //System.out.println("解析到的数据:"+dataList); adapter = new MyAdapter(BudejieActivity.this, dataList); listView.setAdapter(adapter); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }}; new ShowApiRequest( "http://route.showapi.com/255-1", "12672", "fe08f7b8ae3f4e3cb6855304fe96bbeb") .setResponseHandler(resHandler1) .addTextPara("page", "1") .post(); } if(msg.arg2==2){ System.out.println("加载操作"); final AsyncHttpResponseHandler resHandler2 = new AsyncHttpResponseHandler(){ public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable e) { //做一些异常处理 e.printStackTrace(); Toast.makeText(BudejieActivity.this, "网络异常", 0).show(); } public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { try { //数据解析完添加到ListView //System.out.println("response is :"+new String(responseBody,"utf-8")); result = new String(responseBody,"utf-8"); readJson(result); //System.out.println("解析到的数据:"+dataList); adapter = new MyAdapter(BudejieActivity.this, dataList); listView.setAdapter(adapter); listView.setSelection(currentList); currentList = listView.getCount(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }}; new ShowApiRequest( "http://route.showapi.com/255-1", "12672", "fe08f7b8ae3f4e3cb6855304fe96bbeb") .setResponseHandler(resHandler2) .addTextPara("page", Integer.toString(currentPage+1)) .post(); currentPage+=1; } } } }
activity_budejie.xml不得姐页面布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background= "@drawable/bg4" > <RelativeLayout android:id="@+id/layout_title" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentTop="true" android:background="@drawable/title_bg"> <TextView android:id="@+id/text_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:text="百思不得姐" android:textSize="@dimen/activity_main_title_text_size" android:layout_centerInParent="true" android:gravity="center"/> </RelativeLayout> <com.eric.mylistview.PullToRefreshLayout android:id="@+id/refresh_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/layout_title" > <include layout="@layout/layout_head_refresh" /> <com.eric.mylistview.PullableListView android:id="@+id/content_view" android:layout_width="match_parent" android:layout_height="match_parent" android:dividerHeight="1dp" /> <include layout="@layout/layout_head_load" /> </com.eric.mylistview.PullToRefreshLayout> </RelativeLayout>
layout_listview_item.xml列表子项布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp" > <RelativeLayout android:id="@+id/layout_budejie_head" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/image_budejie_touxiang" android:layout_width="30dp" android:layout_height="30dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@drawable/view9"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_budejie_touxiang" android:layout_centerVertical="true" android:orientation="vertical"> <TextView android:id="@+id/text_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:textSize="10sp" android:text="EricFantastic"/> <TextView android:id="@+id/text_create_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:textSize="10sp" android:text="2015-11-23 16:52"/> </LinearLayout> </RelativeLayout> <TextView android:id="@+id/text_budejie_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/layout_budejie_head" android:textColor="#FFF" android:textSize="18sp" android:text="hahahahahahhah"/> <ImageView android:id="@+id/image_budejie_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_below="@id/text_budejie_text" /> <WebView android:id="@+id/WebView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layerType="software" android:visibility="gone" android:layout_below="@id/image_budejie_content"/> <RelativeLayout android:id="@+id/layout_budejie_end" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/WebView"> <LinearLayout android:layout_width="fill_parent" android:layout_height="40dp" android:layout_centerVertical="true" android:orientation="horizontal"> <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center_vertical" android:background="@drawable/love"/> <TextView android:id="@+id/text_love" android:layout_width="wrap_content" android:layout_height="20dp" android:textColor="#FFF" android:layout_weight="1" android:layout_gravity="center_vertical" android:text="2220"/> <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center_vertical" android:background="@drawable/hate"/> <TextView android:id="@+id/text_hate" android:layout_width="wrap_content" android:layout_height="20dp" android:textColor="#FFF" android:layout_weight="1" android:layout_gravity="center_vertical" android:text="235"/> </LinearLayout> </RelativeLayout> </RelativeLayout>
ChatActivity小星问答页面,发送文本到指定API接口,返回响应数据;
ChatActivity.java类似于微信聊天页面,发送用户输入数据给API接口,返回响应数据更新页面。
package com.eric.activity; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; import com.eric.constellation.R; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; /* *@author Eric *@2015-11-21上午8:21:17 */ public class ChatActivity extends Activity implements OnClickListener{ public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent ="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="c67cfd82f71f1e011c7c6d40c7e263bb"; private ImageView image_voice,image_plus,image_send,image_chat_back; private EditText edit_chat; private Drawable img_userDrawable,img_friendDrawable; private String sendMsg,getMsg; public static ChatHandler handler; private ArrayList<HashMap<String, Object>> chatList = new ArrayList<HashMap<String,Object>>(); String[] from = {"img","text"}; int[] to = {R.id.image_me,R.id.text_me,R.id.image_friend,R.id.text_friend}; int[] item_layout = {R.layout.i_sendmsg_item,R.layout.friend_sendmsg_item}; private ListView listview_chat; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); setContentView(R.layout.activity_chat); image_voice = (ImageView) findViewById(R.id.image_voice); image_plus = (ImageView) findViewById(R.id.image_plus); image_send = (ImageView) findViewById(R.id.image_send); image_chat_back = (ImageView) findViewById(R.id.image_chat_back); listview_chat = (ListView) findViewById(R.id.listview_chat); edit_chat = (EditText) findViewById(R.id.edit_chat); randomDrawable(); image_chat_back.setOnClickListener(this); image_voice.setOnClickListener(this); image_plus.setOnClickListener(this); image_send.setOnClickListener(this); myAdapter = new MyAdapter(this, chatList, item_layout, from, to); listview_chat.setAdapter(myAdapter); listview_chat.setSelection(myAdapter.getCount()-1); handler = new ChatHandler(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.image_chat_back: finish(); break; case R.id.image_send: sendMessage(); break; case R.id.image_voice: break; case R.id.image_plus: break; } } public void randomDrawable(){ Random random = new Random(); int n = random.nextInt(3); Resources resourses = this.getResources(); Resources resourses2 = this.getResources(); switch (n) { case 0: img_friendDrawable = resourses.getDrawable(R.drawable.view2); img_userDrawable = resourses2.getDrawable(R.drawable.view1); break; case 1: img_friendDrawable = resourses.getDrawable(R.drawable.view12); img_userDrawable = resourses2.getDrawable(R.drawable.view4); break; case 2: img_friendDrawable = resourses.getDrawable(R.drawable.view10); img_userDrawable = resourses2.getDrawable(R.drawable.view3); break; } } public void sendMessage(){ sendMsg = edit_chat.getText().toString(); if(sendMsg==null||sendMsg.trim().equals("")){ edit_chat.setError("发送内容不能为空!"); }else{ //这里发送消息 ; Thread thread = new Thread(new Runnable() { @Override public void run() { getMsg = getRequest(sendMsg); Message msg = new Message(); Bundle b = new Bundle(); b.putString("strObject", getMsg); msg.setData(b); handler.sendMessage(msg); } }); thread.start(); edit_chat.setText(null); addChatToListview(0, sendMsg); //将ListView设置为置底显示,自动刷新UI,使得消息及时显示 listview_chat.setSelection(myAdapter.getCount()-1); } InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edit_chat.getWindowToken(),0); } //获取机器人数据 public static String getRequest(String info){ String result =null; String url ="http://op.juhe.cn/robot/index";//请求接口地址 Map<String, Object> params = new HashMap<String, Object>();//请求参数 params.put("key",APPKEY);//您申请到的本接口专用的APPKEY params.put("info",info);//要发送给机器人的内容,不要超过30个字符 params.put("dtype","json");//返回的数据的格式,json或xml,默认为json params.put("loc","");//地点,如北京中关村 params.put("lon","");//经度,东经116.234632(小数点后保留6位),需要写为116234632 params.put("lat","");//纬度,北纬40.234632(小数点后保留6位),需要写为40234632 params.put("userid","");//1~32位,此userid针对您自己的每一个用户,用于上下文的关联 try { result =net(url, params, "GET"); System.out.println("FUCK="+result); } catch (Exception e) { e.printStackTrace(); } return result; } //网络请求 public static String net(String strUrl, Map<String, Object> params,String method) throws Exception { HttpURLConnection conn = null; BufferedReader reader = null; String rs = null; try { StringBuffer sb = new StringBuffer(); if(method==null || method.equals("GET")){ strUrl = strUrl+"?"+urlencode(params); } URL url = new URL(strUrl); conn = (HttpURLConnection) url.openConnection(); if(method==null || method.equals("GET")){ conn.setRequestMethod("GET"); }else{ conn.setRequestMethod("POST"); conn.setDoOutput(true); } conn.setRequestProperty("User-agent", userAgent); conn.setUseCaches(false); conn.setConnectTimeout(DEF_CONN_TIMEOUT); conn.setReadTimeout(DEF_READ_TIMEOUT); conn.setInstanceFollowRedirects(false); conn.connect(); InputStream is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); String strRead = null; while ((strRead = reader.readLine()) != null) { sb.append(strRead); } rs = sb.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); } if (conn != null) { conn.disconnect(); } } return rs; } //将map型转为请求参数型 public static String urlencode(Map<String, ?> data) { StringBuilder sb = new StringBuilder(); for (Map.Entry<String, ?> i : data.entrySet()) { try { sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return sb.toString(); } public class ChatHandler extends Handler{ private Drawable draw; @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); Bundle b = msg.getData(); String strObjcet = b.getString("strObject"); try { JSONTokener jsonParser = new JSONTokener(getMsg); JSONObject object = (JSONObject) jsonParser.nextValue(); JSONObject resultObject = object.getJSONObject("result"); String result = resultObject.getString("text"); if(result != null){ addChatToListview(1, result); } } catch (JSONException e) { System.out.println("错误:"+e); e.printStackTrace(); } listview_chat.setSelection(myAdapter.getCount()-1); } } public void addChatToListview(int who,String chat){ HashMap<String,Object> map = new HashMap<String,Object>(); map.put("who", who); map.put("chat", chat); chatList.add(map); } public class MyAdapter extends BaseAdapter{ Context context; ArrayList<HashMap<String,Object>> chatList= null; int[] layout; String[] from; int[] to; LayoutInflater listcontainer; public MyAdapter(Context context, ArrayList<HashMap<String, Object>> chatList, int[] layout, String[] from, int[] to){ super(); this.context = context; listcontainer = LayoutInflater.from(context); this.chatList = chatList; this.layout = layout; this.from = from; this.to = to; } @Override public int getCount() { return chatList.size(); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int ItemId) { return ItemId; } @Override public View getView(int item, View view, ViewGroup parent) { //获取当前子项的who和chat int who = (Integer)chatList.get(item).get("who"); String msg = (String)chatList.get(item).get("chat"); //根据who设置当前子项的布局和文本,0为自己发送的布局,1为好友发送的布局 if(who==0) { view=listcontainer.inflate(R.layout.i_sendmsg_item, null); ((TextView)view.findViewById(R.id.text_me)).setText(msg); ((TextView)view.findViewById(R.id.text_me)).setTextColor(android.graphics.Color.BLUE); ((ImageView)view.findViewById(R.id.image_me)).setImageDrawable(img_userDrawable); ((TextView)view.findViewById(R.id.text_me)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //我发送消息文本点击事件 } }); ((ImageView)view.findViewById(R.id.image_me)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //我头像点击事件 } }); return view; } else { view=listcontainer.inflate(R.layout.friend_sendmsg_item, null); ((TextView)view.findViewById(R.id.text_friend)).setText(msg); ((TextView)view.findViewById(R.id.text_friend)).setTextColor(android.graphics.Color.BLUE); ((ImageView)view.findViewById(R.id.image_friend)).setImageDrawable(img_friendDrawable); ((TextView)view.findViewById(R.id.text_friend)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //好友消息文本点击事件 } }); ((ImageView)view.findViewById(R.id.image_friend)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //好友头像点击事件 } }); return view; } } } }
activity_chat.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background= "@drawable/bg4" > <RelativeLayout android:id="@+id/layout_title_chat" android:layout_width="fill_parent" android:layout_height="@dimen/activity_main_title_height" android:layout_alignParentTop="true" android:background="@drawable/title_bg"> <TextView android:id="@+id/text_title_chat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:text="小星问答" android:textSize="@dimen/activity_main_title_text_size" android:layout_centerInParent="true" android:gravity="center"/> <ImageView android:id="@+id/image_chat_back" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:background="@drawable/title_back_up_down" /> </RelativeLayout> <ListView android:id="@+id/listview_chat" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="50dp" android:listSelector="@drawable/chatlist_item_up_down" android:layout_below="@id/layout_title_chat" android:divider="#aaaaaa" android:cacheColorHint="#0000" android:dividerHeight="0px" ></ListView> <RelativeLayout android:id="@+id/layout_chat_bottom" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="@drawable/title_bg" > <ImageView android:id="@+id/image_voice" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_vertical" android:layout_marginLeft="5dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@drawable/voice_up_down"/> <EditText android:id="@+id/edit_chat" android:layout_width="220dp" android:layout_height="40dp" android:layout_marginLeft="50dp" android:layout_centerVertical="true" android:inputType="text" android:background="@drawable/title_bg" android:textColor="#FFF" /> <ImageView android:id="@+id/image_plus" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_vertical" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="50dp" android:background="@drawable/plus_up_down"/> <ImageView android:id="@+id/image_send" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_vertical" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:background="@drawable/send_up_down"/> </RelativeLayout> </RelativeLayout>i_sendmsg_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingLeft="50dp" android:paddingRight="8dp" android:paddingTop="10dp" android:paddingBottom="10dp" > <ImageView android:id="@+id/image_me" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_alignParentRight="true" /> <TextView android:id="@+id/text_me" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:textSize="18sp" android:textStyle="bold" android:layout_toLeftOf="@id/image_me" android:background="@drawable/i_chat_bg_up_down" /> </RelativeLayout>
friend_sendmsg_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingLeft="8dp" android:paddingRight="50dp" android:paddingTop="10dp" android:paddingBottom="10dp" > <ImageView android:id="@+id/image_friend" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginRight="5dp" android:layout_alignParentLeft="true" /> <TextView android:id="@+id/text_friend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:textSize="18sp" android:textStyle="bold" android:layout_toRightOf="@id/image_friend" android:background="@drawable/friend_chat_up_down" /> </RelativeLayout>
ConstellationMatchActivity星座配对页面,自定义滚轮控件,跳转数据页面;
ConstellationSecretActivity星座揭秘页面,简单文本;
ConstellationWallActivity星座壁纸页面,添加自定义动画及轮播图片预览效果;
HelpActivity帮助页面,简单文本;
JokeActivity笑话大全页面,获取笑话数据显示列表,下拉刷新上拉加载;
LuckActivity本日星座运势页面,请求当日星座运势数据;
LuckMonthActivity本月星座运势页面,请求本月星座运势数据;
LuckNextWeekActivity下周星座运势页面,请求下周星座运势数据;
LuckTomoActivity明日星座运势页面;
LuckWeekActivity本周星座运势页面;
LuckYearActivity本年星座运势页面;
MainActivity主界面,标题、fragment容器及tab选项;
StartActivity启动页面,随机图片;
TalkActivity星座物语页面,简单文本;
TestActivity性格测试页面,根据选项返回测试结果;
目前发现这么写,会占用大量的篇幅,下面一段时间会对项目进行拆分,形成链接,方便读者查看。