activity
package com.nico; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.WindowManager; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; import com.google.gson.reflect.TypeToken; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; public class MainActivity extends Activity implements View.OnClickListener { private View mPosView; private TextView mProviceTv, mCityTv, mDistrictTv, mRoomTv; private ListView mListView; private ImageView mCloseIv; private ListprojectList = new ArrayList (); private List mProviceList = new ArrayList (); private List mAddressList = new ArrayList (); private List mCityList = new ArrayList (); private Project mProvicePrj, mCityPrj, mAddressPrj; /** * 当前位置 */ private int mPos = 0; /** * 上一次的位置 */ private int mPreviousPos = 0; /** * 动画监听 */ private CustomAnimationListener mListener = new CustomAnimationListener(); /** * */ private AddressAdapter mAdapter; private List mDataList = new ArrayList (); private ProgressDialog progressDialog = null; private String mUuid = ""; String authToken = "74629342feccb3380f6e51dced22a061"; private int mSegmentPos = -1; private int mBuildPos = -1; private int mRoomPos = -1; private TextView mAddressTv; private LinearLayout mSelectLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAdapter = new AddressAdapter(this, mDataList); initView(); mListView.setAdapter(mAdapter); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: startAnimation(); switch (mPos) { case 0: if (mProviceList.isEmpty()) { initData(mPos); } else { mDataList.clear(); mDataList.addAll(mProviceList); mAdapter.notifyDataSetChanged(); } break; case 1: if (mCityList.isEmpty()) { initData(mPos); } else { mDataList.clear(); mDataList.addAll(mCityList); mAdapter.notifyDataSetChanged(); } break; case 2: if (mAddressList.isEmpty()) { initData(mPos); } else { mDataList.clear(); mDataList.addAll(mAddressList); mAdapter.notifyDataSetChanged(); } break; } break; case 2: if (mPos == 0) { RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(getWidth() / 4, 2); params4.addRule(RelativeLayout.ALIGN_PARENT_LEFT); params4.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); mPosView.setLayoutParams(params4); mProviceTv.setSelected(true); mCityTv.setSelected(false); mDistrictTv.setSelected(false); mRoomTv.setSelected(false); } else if (mPos == 1) { mProviceTv.setSelected(false); mCityTv.setSelected(true); mDistrictTv.setSelected(false); mRoomTv.setSelected(false); RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(getWidth() / 4, 2); params4.addRule(RelativeLayout.ALIGN_LEFT, mCityTv.getId()); params4.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); mPosView.setLayoutParams(params4); } else if (mPos == 2) { mProviceTv.setSelected(false); mCityTv.setSelected(false); mDistrictTv.setSelected(true); mRoomTv.setSelected(false); RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(getWidth() / 4, 2); params4.addRule(RelativeLayout.ALIGN_LEFT, mDistrictTv.getId()); params4.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); mPosView.setLayoutParams(params4); } else if (mPos == 3) { mProviceTv.setSelected(false); mCityTv.setSelected(false); mDistrictTv.setSelected(false); mRoomTv.setSelected(true); RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(getWidth() / 4, 2); params4.addRule(RelativeLayout.ALIGN_LEFT, mRoomTv.getId()); params4.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); mPosView.setLayoutParams(params4); } break; case 3: TranslateAnimation updownAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f); updownAnimation.setDuration(500); updownAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); updownAnimation.setFillAfter(true); mSelectLayout.startAnimation(updownAnimation); String pStr = (mProvicePrj!=null)?mProvicePrj.getName():"省份:"; String cStr = (mCityPrj!=null)?mCityPrj.getName():"城市:"; String aStr = (mAddressPrj!=null)?mAddressPrj.getName():"县区:"; mAddressTv.setText(pStr+cStr+aStr); break; } } }; private void initView() { mProviceTv = (TextView) findViewById(R.id.province_tv); mCityTv = (TextView) findViewById(R.id.city_tv); mDistrictTv = (TextView) findViewById(R.id.district_tv); mRoomTv = (TextView) findViewById(R.id.room_tv); mListView = (ListView) findViewById(R.id.content_listview); mCloseIv = (ImageView) findViewById(R.id.close_iv); mPosView = findViewById(R.id.pos_line); mAddressTv = (TextView) findViewById(R.id.helloworld); mSelectLayout = (LinearLayout) findViewById(R.id.select_layout); mProviceTv.setOnClickListener(this); mCityTv.setOnClickListener(this); mDistrictTv.setOnClickListener(this); mRoomTv.setOnClickListener(this); mCloseIv.setOnClickListener(this); initTextView(); handler.sendEmptyMessage(1); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) { switch (mPos) { case 0: mProviceTv.setVisibility(View.VISIBLE); mCityTv.setVisibility(View.VISIBLE); mDistrictTv.setVisibility(View.INVISIBLE); mRoomTv.setVisibility(View.INVISIBLE); mSegmentPos = position; refreshSelect(position); mProvicePrj = mDataList.get(position); handler.sendEmptyMessage(1); mPreviousPos = mPos; mPos = 1; break; case 1: mProviceTv.setVisibility(View.VISIBLE); mCityTv.setVisibility(View.VISIBLE); mDistrictTv.setVisibility(View.VISIBLE); mRoomTv.setVisibility(View.INVISIBLE); mBuildPos = position; refreshSelect(position); mCityPrj = mDataList.get(position); handler.sendEmptyMessage(1); mPreviousPos = mPos; mPos = 2; break; case 2: mProviceTv.setVisibility(View.VISIBLE); mCityTv.setVisibility(View.VISIBLE); mDistrictTv.setVisibility(View.VISIBLE); mRoomTv.setVisibility(View.INVISIBLE); mRoomPos = position; refreshSelect(position); mAddressPrj = mDataList.get(position); mPreviousPos = mPos; mPos = 3; handler.sendEmptyMessage(3); break; case 3: mProviceTv.setVisibility(View.VISIBLE); mCityTv.setVisibility(View.VISIBLE); mDistrictTv.setVisibility(View.VISIBLE); mRoomTv.setVisibility(View.INVISIBLE); break; } } }); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.province_tv: mPreviousPos = mPos; mPos = 0; handler.sendEmptyMessage(1); break; case R.id.city_tv: mPreviousPos = mPos; mPos = 1; handler.sendEmptyMessage(1); break; case R.id.district_tv: mPreviousPos = mPos; mPos = 2; handler.sendEmptyMessage(1); break; case R.id.room_tv: mPreviousPos = mPos; mPos = 3; handler.sendEmptyMessage(1); break; case R.id.close_iv: handler.sendEmptyMessage(3); break; } } // private void initSelectStatus() { // // Message msg = handler.obtainMessage(); // msg.what = 1; // handler.sendMessage(msg); // } private int getWidth() { DisplayMetrics dm = new DisplayMetrics(); WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } private void initTextView() { RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(getWidth() / 4, RelativeLayout.LayoutParams.MATCH_PARENT); params1.addRule(RelativeLayout.ALIGN_PARENT_LEFT); mProviceTv.setLayoutParams(params1); RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(getWidth() / 4, RelativeLayout.LayoutParams.MATCH_PARENT); params2.addRule(RelativeLayout.RIGHT_OF, mProviceTv.getId()); mCityTv.setLayoutParams(params2); RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(getWidth() / 4, RelativeLayout.LayoutParams.MATCH_PARENT); params3.addRule(RelativeLayout.RIGHT_OF, mCityTv.getId()); mDistrictTv.setLayoutParams(params3); RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(getWidth() / 4, RelativeLayout.LayoutParams.MATCH_PARENT); params4.addRule(RelativeLayout.RIGHT_OF, mDistrictTv.getId()); mRoomTv.setLayoutParams(params4); RelativeLayout.LayoutParams params5 = new RelativeLayout.LayoutParams(getWidth() / 4, 2); params5.addRule(RelativeLayout.ALIGN_PARENT_LEFT); params5.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); mPosView.setLayoutParams(params5); mProviceTv.setSelected(true); mCityTv.setSelected(false); mDistrictTv.setSelected(false); mRoomTv.setSelected(false); mProviceTv.setVisibility(View.VISIBLE); mCityTv.setVisibility(View.INVISIBLE); mDistrictTv.setVisibility(View.INVISIBLE); mRoomTv.setVisibility(View.INVISIBLE); } private void startAnimation() { switch (mPos - mPreviousPos) { case -1: TranslateAnimation lefttrans = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); lefttrans.setDuration(100); lefttrans.setAnimationListener(mListener); mPosView.startAnimation(lefttrans); break; case 1: TranslateAnimation righttrans = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); righttrans.setDuration(100); righttrans.setAnimationListener(mListener); mPosView.startAnimation(righttrans); break; case 2: TranslateAnimation right2trans = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 2.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); right2trans.setDuration(200); right2trans.setAnimationListener(mListener); mPosView.startAnimation(right2trans); break; case 3: TranslateAnimation right3trans = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 3.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); right3trans.setDuration(300); right3trans.setAnimationListener(mListener); mPosView.startAnimation(right3trans); break; case -2: TranslateAnimation left2trans = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -2.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); left2trans.setDuration(200); left2trans.setAnimationListener(mListener); mPosView.startAnimation(left2trans); break; case -3: TranslateAnimation left3trans = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -3.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); left3trans.setDuration(300); left3trans.setAnimationListener(mListener); mPosView.startAnimation(left3trans); break; } } class CustomAnimationListener implements Animation.AnimationListener { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { Message msg = handler.obtainMessage(); msg.what = 2; handler.sendMessage(msg); } @Override public void onAnimationRepeat(Animation animation) { } } /** * */ private void initData(int mStatus) { mDataList.clear(); switch (mStatus) { case 0: requestProviceData(); break; case 1: requestCityData(); break; case 2: requestAddressData(); break; } // for (int i = 0; i < 20; i++) { // switch (mStatus) { // case 0: // mDataList.add("测试省份数据" + i); // break; // case 1: // mDataList.add("测试城市数据" + i); // break; // case 2: // mDataList.add("测试县区数据" + i); // break; // case 3: // mDataList.add("测试门牌数据" + i); // break; // } // } } @SuppressLint("HandlerLeak") private Handler handlerForProjectList = new Handler() { public void handleMessage(Message msg) { if (null != progressDialog && progressDialog.isShowing()) { progressDialog.dismiss(); } if (Constants.SUCCESS == msg.what) { @SuppressWarnings("unchecked") ArrayList projectTempList = (ArrayList ) msg.obj; switch (mPos) { case 0: mProviceList = projectTempList; mDataList.clear(); mDataList.addAll(projectTempList); mAdapter.notifyDataSetChanged(); break; case 1: mCityList = projectTempList; mDataList.clear(); mDataList.addAll(projectTempList); mAdapter.notifyDataSetChanged(); break; case 2: mAddressList = projectTempList; mDataList.clear(); mDataList.addAll(projectTempList); mAdapter.notifyDataSetChanged(); break; } } else if (Constants.FAILURE == msg.what) { } else if (Constants.NET_FAILURE == msg.what) { } } }; private void requestProviceData() { progressDialog = ProgressDialog.show(this, "", "加载中..", true, true); projectList.clear(); HashMap params = new HashMap (); params.put("Authorization", authToken); params.put("name", ""); params.put("pageNum", "1"); params.put("pageSize", "256"); HttpUtils.HttpGetRequest_Asyn(this, Constants.HTTP_URL_SEGMENT, params, handlerForProjectList, new TypeToken >() { }.getType()); } private void requestCityData() { progressDialog = ProgressDialog.show(this, "", "加载中..", true, true); HashMap params = new HashMap (); params.put("Authorization", authToken); params.put("segmentUuid", mProvicePrj.getUuid()); HttpUtils.HttpGetRequest_Asyn(this, Constants.HTTP_URL_BUILDING, params, handlerForProjectList, new TypeToken >() { }.getType()); } private void requestAddressData() { progressDialog = ProgressDialog.show(this, "", "加载中..", true, true); HashMap params = new HashMap (); params.put("Authorization", authToken); params.put("buildingUuid", mCityPrj.getUuid()); // 获取数据用老接口 HttpUtils.HttpGetRequest_Asyn(this, Constants.HTTP_URL_UNIT, params, handlerForProjectList, new TypeToken >() { }.getType()); } private void refreshSelect(int selectPos) { switch (mPos) { case 0: for(Project prj : mProviceList) { prj.setSelect(false); } mProviceList.get(selectPos).setSelect(true); mCityList.clear(); break; case 1: for(Project prj : mCityList) { prj.setSelect(false); } mCityList.get(selectPos).setSelect(true); mAddressList.clear(); break; case 2: for(Project prj : mAddressList) { prj.setSelect(false); } mAddressList.get(selectPos).setSelect(true); break; } mDataList.get(selectPos).setSelect(true); mAdapter.notifyDataSetChanged(); } }
主布局