`

仿京东android客户端收件地址选择

阅读更多
纯手写,可能有些问题,功能已实现
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 List<Project> projectList = new ArrayList<Project>();

    private List<Project> mProviceList = new ArrayList<Project>();

    private List<Project> mAddressList = new ArrayList<Project>();

    private List<Project> mCityList = new ArrayList<Project>();


    private Project mProvicePrj, mCityPrj, mAddressPrj;

    /**
     * 当前位置
     */
    private int mPos = 0;

    /**
     * 上一次的位置
     */
    private int mPreviousPos = 0;


    /**
     * 动画监听
     */
    private CustomAnimationListener mListener = new CustomAnimationListener();

    /**
     *
     */
    private AddressAdapter mAdapter;

    private List<Project> mDataList = new ArrayList<Project>();

    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<Project> projectTempList = (ArrayList<Project>) 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<String, String> params = new HashMap<String, String>();

        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<ArrayList<Project>>() {
                }.getType());

    }

    private void requestCityData() {
        progressDialog = ProgressDialog.show(this, "", "加载中..", true, true);

        HashMap<String, String> params = new HashMap<String, String>();

        params.put("Authorization", authToken);
        params.put("segmentUuid", mProvicePrj.getUuid());

        HttpUtils.HttpGetRequest_Asyn(this, Constants.HTTP_URL_BUILDING, params, handlerForProjectList,
                new TypeToken<ArrayList<Project>>() {
                }.getType());
    }

    private void requestAddressData() {
        progressDialog = ProgressDialog.show(this, "", "加载中..", true, true);
        HashMap<String, String> params = new HashMap<String, String>();
        params.put("Authorization", authToken);
        params.put("buildingUuid", mCityPrj.getUuid());
        // 获取数据用老接口

        HttpUtils.HttpGetRequest_Asyn(this, Constants.HTTP_URL_UNIT, params, handlerForProjectList,
                new TypeToken<ArrayList<Project>>() {
                }.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();
    }
}




主布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin">

    <TextView
        android:id="@+id/helloworld"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <include
        layout="@layout/content"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:layout_alignParentBottom="true"
        android:id="@+id/select_layout"/>
</RelativeLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:background="@drawable/et_bg_no_corners">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="@string/title" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:src="@mipmap/gb"
            android:id="@+id/close_iv"/>
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/guide_layout"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="@drawable/et_bg_no_corners">

        <TextView
            android:id="@+id/province_tv"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="#00000000"
            android:gravity="center"
            android:text="@string/segment"
            android:textColor="@drawable/fragment_tab_textview_color_seletor" />

        <TextView
            android:id="@+id/city_tv"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="#00000000"
            android:gravity="center"
            android:text="@string/building"
            android:visibility="gone"
            android:textColor="@drawable/fragment_tab_textview_color_seletor" />

        <TextView
            android:id="@+id/district_tv"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="#00000000"
            android:gravity="center"
            android:text="@string/unit"
            android:visibility="gone"
            android:textColor="@drawable/fragment_tab_textview_color_seletor" />

        <TextView
            android:id="@+id/room_tv"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="#00000000"
            android:gravity="center"
            android:visibility="gone"
            android:text="@string/room"
            android:textColor="@drawable/fragment_tab_textview_color_seletor" />

        <View
            android:id="@+id/pos_line"
            android:layout_width="wrap_content"
            android:layout_height="2dp"
            android:layout_alignParentBottom="true"
            android:background="#e84316" />
    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#dddddd" />

    <ListView
        android:id="@+id/content_listview"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"></ListView>
</LinearLayout>

分享到:
评论

相关推荐

    仿京东android客户端

    【标题】"仿京东android客户端"是一个Android应用项目,旨在模仿京东官方客户端的功能和界面设计。这个客户端是免费提供的,并且包含完整的源代码,对于学习Android应用开发,特别是电商类应用的开发,提供了宝贵的...

    仿京东android客户端界面源码

    本项目是一套基于安卓的京东商城高仿应用最新版项目源码,实现了首页、搜索页...项目中的资源文件是扒的京东安卓客户端的皮。二维码用的zxing,最新的源码加入了二维码、登录效验、和启动页想研究一下的朋友可以下载。

    仿京东android客户端界面源码.rar

    本项目是一套基于安卓的京东商城高仿应用最新版项目源码,实现了首页、搜索页...项目中的资源文件是扒的京东安卓客户端的皮。二维码用的zxing,最新的源码加入了二维码、登录效验、和启动页想研究一下的朋友可以下载。

    Android仿京东客户端界面源码

    【Android仿京东客户端界面源码】是一个针对Android平台的项目,旨在实现与京东客户端相似的用户界面和交互体验。这个源码提供了开发者一个学习和参考的机会,了解如何在Android环境中构建一个功能丰富的电商应用...

    Android项目源码仿京东商城客户端

    在本项目中,“Android项目源码仿京东商城客户端”是一个基于Android平台的移动应用开发案例,旨在模拟京东商城客户端的功能和界面设计。开发者通过这个项目可以学习到Android应用开发的各种核心技术,包括UI设计、...

    Android仿京东地址省市区选择器源码

    这个“Android仿京东地址省市区选择器源码”就是一个专门为此目的设计的工具,它能够方便地让用户通过级联选择的方式快速选定省份、城市和区县,而无需手动输入。 该源码是基于Android Studio进行开发的,这意味着...

    仿京东商城客户端

    【仿京东商城客户端】是一款基于移动互联网技术,旨在模拟和实现京东商城在线购物功能的应用程序。这个项目的主要目标是为用户提供一个与京东官方APP相似的购物体验,包括商品浏览、搜索、购买、支付以及订单管理等...

    仿京东地址选择器(带省市区编号)

    总结来说,“仿京东地址选择器(带省市区编号)”是一个基于JSON解析和ListView的Android组件,它实现了便捷的地址选择功能,适合那些需要处理地理位置信息的移动应用。通过理解和运用这些知识点,开发者可以提高...

    android 仿京东收货地址 三级联动

    总的来说,实现“android 仿京东收货地址 三级联动”需要对Android UI组件有深入理解,尤其是Spinner的使用,同时还要熟悉数据的获取、处理和展示。通过这样的实践,开发者可以提升对动态更新UI和数据交互的技能,对...

    Android 仿京东地址地区选择器 支持三级县城四级乡镇选择

    在Android应用开发中,经常会遇到需要用户输入收货地址的场景,其中地区选择是一个重要的环节。这个"Android 仿京东地址地区选择器"项目提供了一个高效且完整的解决方案,旨在帮助开发者快速实现类似京东的三级(省...

    仿京东商城客户端框架

    【仿京东商城客户端框架】是基于Android平台设计和实现的一款应用程序框架,旨在为开发者提供一个快速构建类似京东商城客户端的解决方案。这个框架包含了多个关键功能模块,如搜索、分类、购物车以及个人中心,这些...

    Android仿京东地址选择-修改

    在Android开发中,有时我们需要创建一个类似于京东地址选择的功能,让用户能够方便地选取或编辑他们的收货地址。本文将详细讲解如何实现“Android仿京东地址选择-修改”这一功能,主要涉及的技术点包括ViewPager、...

    仿京东商城Android客户端底部菜单源码

    本资源提供的"仿京东商城Android客户端底部菜单源码"是一个针对Android平台的高度仿制京东商城底部菜单的实现,旨在帮助开发者快速构建具有类似功能的应用。 首先,我们需要理解底部菜单(Bottom Navigation)在...

    Android项目源码仿京东商城客户端最新版

    本项目是一套基于安卓的京东商城高仿应用最新版项目源码,实现了首页、搜索页...项目中的资源文件是扒的京东安卓客户端的皮。二维码用的zxing,最新的源码加入了二维码、登录效验、和启动页想研究一下的朋友可以下载。

    Android-仿京东地址选择实现可弹框ViewPagerRecyclerView实现

    本项目"Android-仿京东地址选择实现可弹框ViewPager RecyclerView实现"旨在提供一种类似于京东APP中的地址选择功能,该功能可以弹出一个窗口,让用户方便地浏览和选择地址。以下是对这个项目的详细解析: **1. ...

    Android代码-仿京东客户端

    现有的项目,这套架构也是我应用与项目中的架构,后期也会不断扩展维护 ,欢迎大家提issues ,喜欢就直接拿去用 ,绝不收取任何费用(好吧 , 想收也没人给 ^-^!) 。 后续也会写详细的博客介绍项目内的一些重要...

    仿京东地址选择器(swift 版本)

    在iOS应用开发中,经常会遇到需要用户选择收货地址的场景,京东的地址选择器以其良好的用户体验被广泛应用。本文将详细介绍如何使用Swift实现一个仿京东的地址选择器,并阐述其核心功能和实现方法。 首先,我们需要...

    Android仿京东地址选择

    在Android开发中,"Android仿京东地址选择"是一个常见的需求,主要是为了实现用户在应用内选择或添加收货地址的功能。这个功能的实现基于组件化的设计思路,利用ViewPager、TabLayout以及自定义View等核心组件来构建...

    Android仿京东首页

    本项目"Android仿京东首页"就是一个实例,它旨在重现京东App的首页特性,包括上拉时头部颜色变化、搜索框吸顶效果以及下拉时背景图片的展示。以下将详细解析这些功能的实现原理和相关技术点。 1. **上拉头部变色**...

Global site tag (gtag.js) - Google Analytics