Parcourir la source

1.地址簿列表。

石慧云 il y a 4 ans
Parent
commit
a63d336f9a

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -98,6 +98,7 @@
         <activity android:name=".activity.MsgActivity" />
         <activity android:name=".activity.AccountActivity" />
         <activity android:name=".activity.PersonalVerityActivity" />
+        <activity android:name=".activity.AddressActivity"/>
 
     </application >
 

+ 108 - 0
app/src/main/java/com/quansu/heifengwuliu/activity/AddressActivity.kt

@@ -0,0 +1,108 @@
+package com.quansu.heifengwuliu.activity
+
+import android.graphics.Color
+import android.os.Bundle
+import android.view.View
+import androidx.fragment.app.Fragment
+import androidx.viewpager.widget.ViewPager.OnPageChangeListener
+import com.quansu.heifengwuliu.adapter.FragAdapter
+import com.quansu.heifengwuliu.base.MBActivity
+import com.quansu.heifengwuliu.databinding.ActivityAddressBinding
+import com.quansu.heifengwuliu.fragment.AddressFragment
+import com.ysnows.base.base.BRepository
+import com.ysnows.base.base.BViewModel
+import com.ysnows.base.utils.B
+
+/**
+ *Created by shihuiyun
+ *on 2020/9/11
+ */
+class AddressActivity : MBActivity<BViewModel<BRepository>, ActivityAddressBinding>(){
+    private var adapter: FragAdapter? = null
+    var list= emptyArray<Fragment>()
+    var type="1"
+
+    override fun __before() {
+        super.__before()
+        var bundle = intent.extras
+        if (null != bundle)
+        {
+            type = bundle.getString("type")
+        }
+
+    }
+
+
+
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        initViewPager()
+    }
+
+    private fun initViewPager() {
+
+        val billOneFragment = AddressFragment()
+        billOneFragment.arguments = B.with().putString("type", "0").ok()
+        val billTwoFragment = AddressFragment()
+        billTwoFragment.arguments = B.with().putString("type", "1").ok()
+
+        list = arrayOf(
+                billOneFragment,
+                billTwoFragment)
+
+        adapter = FragAdapter(supportFragmentManager, list.toMutableList())
+        binding.viewPager.offscreenPageLimit = 2
+        binding.viewPager.adapter = adapter
+        binding.viewPager.addOnPageChangeListener(object : OnPageChangeListener {
+            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
+            override fun onPageSelected(position: Int) {
+                choseType(position)
+            }
+
+            override fun onPageScrollStateChanged(state: Int) {}
+        })
+
+        binding.llOne.setOnClickListener(View.OnClickListener { view: View? ->  binding.viewPager.setCurrentItem(0) })
+        binding.llTwo.setOnClickListener(View.OnClickListener { view: View? ->  binding.viewPager.setCurrentItem(1) })
+
+
+
+    }
+
+    private fun choseType(position: Int) {
+        when (position) {
+            0 -> {
+                binding.tvOne.setTextColor(Color.parseColor("#4B3200"))
+                binding.tvTwo.setTextColor(Color.parseColor("#5D5E5F"))
+                binding.lineOne.setVisibility(View.VISIBLE)
+                binding.lineTwo.setVisibility(View.INVISIBLE)
+
+            }
+            1 -> {
+                binding.tvTwo.setTextColor(Color.parseColor("#4B3200"))
+                binding.tvOne.setTextColor(Color.parseColor("#5D5E5F"))
+                binding.lineTwo.setVisibility(View.VISIBLE)
+                binding.lineOne.setVisibility(View.INVISIBLE)
+
+            }
+            else -> {
+            }
+        }
+    }
+
+    override fun listeners() {
+        super.listeners()
+
+
+    }
+
+    override fun binding(): ActivityAddressBinding {
+        return ActivityAddressBinding.inflate(layoutInflater)
+
+    }
+
+    override fun title(): String? {
+        return null
+    }
+}

+ 14 - 0
app/src/main/java/com/quansu/heifengwuliu/adapter/AddressAdapter.kt

@@ -0,0 +1,14 @@
+package com.quansu.heifengwuliu.adapter
+
+import com.chad.library.adapter.base.viewholder.BaseDataBindingHolder
+import com.quansu.heifengwuliu.R
+import com.quansu.heifengwuliu.databinding.ItemAddressBinding
+import com.quansu.heifengwuliu.databinding.ItemMsgBinding
+import com.quansu.heifengwuliu.model.Msg
+import com.ysnows.base.base.BAdapter
+
+class AddressAdapter : BAdapter<Msg, BaseDataBindingHolder<ItemAddressBinding>>(R.layout.item_address) {
+    override fun convert(holder: BaseDataBindingHolder<ItemAddressBinding>, item: Msg) {
+        holder.dataBinding?.item = item
+    }
+}

+ 37 - 0
app/src/main/java/com/quansu/heifengwuliu/adapter/FragAdapter.java

@@ -0,0 +1,37 @@
+package com.quansu.heifengwuliu.adapter;
+
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+
+import java.util.List;
+
+/**
+ * Created by shihuiyun
+ * on 2019-10-12
+ */
+public class FragAdapter extends FragmentPagerAdapter {
+    private List<Fragment> fragments;
+    private FragmentManager fm;
+
+    public FragAdapter(FragmentManager fm) {
+        super(fm);
+        this.fm = fm;
+    }
+
+    public FragAdapter(FragmentManager fm, List<Fragment> fragments) {
+        super(fm);
+        this.fragments = fragments;
+
+    }
+
+    @Override
+    public Fragment getItem(int position) {
+        return fragments.get(position);
+    }
+
+    @Override
+    public int getCount() {
+        return fragments.size();
+    }
+}

+ 3 - 1
app/src/main/java/com/quansu/heifengwuliu/config/MIntentAction.kt

@@ -2,4 +2,6 @@ package com.quansu.heifengwuliu.config
 
 object MIntentAction {
     const val ACTION_UPDATE_APP_WIDGET: String = "action_update_app_widget"
-}
+    const val REQUEST_CODE_ONE = 10086
+
+}

+ 95 - 0
app/src/main/java/com/quansu/heifengwuliu/fragment/AddressFragment.kt

@@ -0,0 +1,95 @@
+package com.quansu.heifengwuliu.fragment
+
+import android.os.Bundle
+import android.text.TextUtils
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import android.view.inputmethod.EditorInfo
+import android.widget.TextView.OnEditorActionListener
+import com.quansu.heifengwuliu.adapter.AddressAdapter
+import com.quansu.heifengwuliu.base.MBRFragment
+import com.quansu.heifengwuliu.databinding.FragmentAddressBinding
+import com.quansu.heifengwuliu.utils.net.NetEngine
+import com.ysnows.base.base.BRRepository
+import com.ysnows.base.base.BRViewModel
+import com.ysnows.base.net.IResponse
+import io.reactivex.Observable
+
+//发货 -卸货地址
+class AddressFragment : MBRFragment<BRViewModel<BRRepository>, AddressAdapter, FragmentAddressBinding>() {
+
+    var type:String=""
+    var k:String=""
+    override fun __before(savedInstanceState: Bundle?) {
+        super.__before(savedInstanceState)
+        val arguments = arguments
+        if(null!=arguments) type=arguments.getString("type")
+
+    }
+
+    override fun init(savedInstanceState: Bundle?) {
+        super.init(savedInstanceState)
+        binding.sidebar.attachTipView(binding.tvTip)
+
+
+    }
+
+
+    override fun listeners() {
+        super.listeners()
+
+//        binding.sidebar.setOnSelectedListener({ position, text ->
+//            if (adapter()!= null && adapter().size() > 0) {
+//                for (i in 0 until adapter()) {
+//                    val client: CustomerBean = adapter.getData().get(i) as CustomerBean
+//                    if (text.equals(client.py)) {
+//                        (binding.recyclerView.getLayoutManager() as LinearLayoutManager).scrollToPositionWithOffset(i, 0)
+//                    } else {
+//                    }
+//                }
+//            }
+//        })
+
+
+        binding.ivDelete.setOnClickListener {
+            if (!TextUtils.isEmpty(binding.etName.text.toString().trim { it <= ' ' })) {
+                binding.etName.text = null
+                onRefresh()
+            } else {
+                toast( "已经删除搜索条件!")
+            }
+        }
+
+        binding.etName.setOnEditorActionListener(OnEditorActionListener { textView, i, keyEvent ->
+            if (i == EditorInfo.IME_ACTION_SEARCH) {
+                k = binding.etName.text.toString().trim()
+                onRefresh()
+                return@OnEditorActionListener true
+            }
+            false
+        })
+
+        binding.tvSearch.setOnClickListener { t ->
+            k = binding.etName.text.toString().trim()
+            onRefresh()
+
+        }
+
+    }
+
+    override fun initAdapter(): AddressAdapter {
+        return AddressAdapter()
+    }
+
+    override fun api(): Observable<out IResponse<*>> {
+        return NetEngine.service.addressList(type,k, vm?.repository()?.autoPage()!!)
+    }
+
+    override fun binding(inflater: LayoutInflater, container: ViewGroup?): FragmentAddressBinding {
+        return FragmentAddressBinding.inflate(layoutInflater, container, false)
+    }
+
+    override fun title(): String? {
+        return null
+    }
+}

+ 15 - 6
app/src/main/java/com/quansu/heifengwuliu/fragment/OwnerSingleFragment.kt

@@ -2,7 +2,6 @@ package com.quansu.heifengwuliu.fragment
 
 import android.content.Context
 import android.os.Bundle
-import android.util.Log
 import android.view.LayoutInflater
 import android.view.ViewGroup
 import android.view.animation.AccelerateInterpolator
@@ -10,9 +9,11 @@ import android.view.animation.DecelerateInterpolator
 import com.hwangjr.rxbus.annotation.Subscribe
 import com.hwangjr.rxbus.annotation.Tag
 import com.quansu.heifengwuliu.R
+import com.quansu.heifengwuliu.activity.AddressActivity
 import com.quansu.heifengwuliu.adapter.FragmentAdapter
 import com.quansu.heifengwuliu.base.MBFragment
 import com.quansu.heifengwuliu.config.ConfigRx
+import com.quansu.heifengwuliu.config.MIntentAction
 import com.quansu.heifengwuliu.databinding.FragmentOwnersingleBinding
 import com.quansu.heifengwuliu.utils.AList
 import com.quansu.heifengwuliu.utils.TAB
@@ -23,8 +24,8 @@ import com.ysnows.base.base.BViewModel
 import com.ysnows.base.ccretrofit.CCRetrofit
 import com.ysnows.base.model.PositionBean
 import com.ysnows.base.route.IGaode
-import com.ysnows.base.route.IJpush
 import com.ysnows.base.utils.B
+import com.ysnows.base.utils.UiSwitch
 import net.lucode.hackware.magicindicator.ViewPagerHelper
 import net.lucode.hackware.magicindicator.buildins.UIUtil
 import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator
@@ -61,21 +62,29 @@ class OwnerSingleFragment : MBFragment<BViewModel<BRepository>, FragmentOwnersin
          binding.viewEnter.tvCity.setHint("请选择卸货地址")
          binding.viewEnter.llChoseMap.setOnClickListener {
             //地图选点
-
              type=2
              choseMap()
-
         }
 
 
         binding.viewOut.llChoseMap.setOnClickListener {
             //地图选点
-            type=1
+            type = 1
             choseMap()
+        }
+        binding.viewOut.llChoseAddress.setOnClickListener {
+            //地址薄 1
+            UiSwitch.bundleRes(this, AddressActivity::class.java,
+                    B.with().putString("type", "1").ok(), MIntentAction.REQUEST_CODE_ONE)
+        }
+        binding.viewEnter.llChoseAddress.setOnClickListener {
+            //地址薄 2
+            UiSwitch.bundleRes(this, AddressActivity::class.java,
+                    B.with().putString("type", "2").ok(), MIntentAction.REQUEST_CODE_ONE)
+        }
 
 
 
-        }
     }
 
 

+ 8 - 0
app/src/main/java/com/quansu/heifengwuliu/utils/net/ApiService.kt

@@ -139,5 +139,13 @@ interface ApiService {
     @GET("api/user/getuserinfo")
     fun getUser(): Observable<Response<User>>
 
+    /**
+     * 地址列表
+     * @return
+     */
+    @GET("api/address/addressList")
+    fun addressList(@Query("type") type: String?,
+                    @Query("k") k: String,@Query("page") page: Int): Observable<Response<ArrayList<Todo>>>
+
 
 }

+ 104 - 0
app/src/main/java/com/quansu/heifengwuliu/view/BaseTextView.java

@@ -0,0 +1,104 @@
+package com.quansu.heifengwuliu.view;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.RippleDrawable;
+import android.graphics.drawable.StateListDrawable;
+import android.os.Build;
+import android.util.AttributeSet;
+
+import androidx.annotation.Nullable;
+import androidx.core.graphics.ColorUtils;
+import androidx.core.view.ViewCompat;
+
+import com.ysnows.base.utils.AnimateUtils;
+
+
+/**
+ * Created by xianguangjin on 16/6/1.
+ * 自定义
+ */
+
+public class BaseTextView extends androidx.appcompat.widget.AppCompatTextView {
+
+    public BaseTextView(Context context) {
+        this(context, null);
+
+    }
+
+    public BaseTextView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+
+
+    }
+
+    public BaseTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init(context, attrs, defStyleAttr);
+
+    }
+
+    private void init(Context context, AttributeSet attrs, int defStyleAttr) {
+        Drawable background = getBackground();
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            setBackground(new RippleDrawable(ColorStateList.valueOf(Color.parseColor("#9B9B9B")), background, new ColorDrawable(Color.parseColor("#8AF9EE"))));
+        } else {
+            if (background instanceof ColorDrawable) {
+                int color = ((ColorDrawable) background).getColor();
+                ColorDrawable newColorDrawable = new ColorDrawable(ColorUtils.setAlphaComponent(color, 160));
+                StateListDrawable stateListDrawable = new StateListDrawable();
+                stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, newColorDrawable);
+                stateListDrawable.addState(new int[]{}, background);
+                ViewCompat.setBackground(this, stateListDrawable);
+                setClickable(true);
+            } else if (background instanceof BitmapDrawable) {
+                Bitmap bitmap = ((BitmapDrawable) background).getBitmap();
+                BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bitmap);
+                bitmapDrawable.setAlpha(160);
+                StateListDrawable stateListDrawable = new StateListDrawable();
+                stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, bitmapDrawable);
+                stateListDrawable.addState(new int[]{}, background);
+                ViewCompat.setBackground(this, stateListDrawable);
+                setClickable(true);
+            } else {
+                ColorStateList textColors = getTextColors();
+                int defaultColor = textColors.getDefaultColor();
+                int pressed = ColorUtils.setAlphaComponent(defaultColor, 160);
+                setTextColor(createColorStateList(defaultColor, pressed, pressed, pressed));
+            }
+        }
+    }
+
+
+    @Override
+    public void setOnClickListener(@Nullable OnClickListener l) {
+        super.setOnClickListener(l);
+        if (l != null) {
+            new AnimateUtils().button_click(this, l);
+        }
+    }
+
+    /**
+     * 对TextView设置不同状态时其文字颜色。
+     */
+    private ColorStateList createColorStateList(int normal, int pressed, int focused, int unable) {
+        int[] colors = new int[]{pressed, focused, normal, focused, unable, normal};
+        int[][] states = new int[6][];
+        states[0] = new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled};
+        states[1] = new int[]{android.R.attr.state_enabled, android.R.attr.state_focused};
+        states[2] = new int[]{android.R.attr.state_enabled};
+        states[3] = new int[]{android.R.attr.state_focused};
+        states[4] = new int[]{android.R.attr.state_window_focused};
+        states[5] = new int[]{};
+        ColorStateList colorList = new ColorStateList(states, colors);
+        return colorList;
+    }
+
+
+}

+ 43 - 0
app/src/main/java/com/quansu/heifengwuliu/view/CircleTextView.java

@@ -0,0 +1,43 @@
+package com.quansu.heifengwuliu.view;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Path;
+import android.util.AttributeSet;
+
+
+
+/**
+ * Created by zhulei on 15/12/10.
+ */
+public class CircleTextView extends BaseTextView {
+    public CircleTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public CircleTextView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public CircleTextView(Context context) {
+        this(context, null);
+    }
+
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        int measuredWith = getMeasuredWidth();
+        int measuredHeight = getMeasuredHeight();
+        int max = Math.max(measuredHeight, measuredWith);
+        setMeasuredDimension(max, max);
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        Path clipPath = new Path();
+        clipPath.addCircle(getWidth() / 2, getHeight() / 2, Math.max(getWidth(), getHeight()) / 2, Path.Direction.CW);
+        canvas.clipPath(clipPath);
+        super.draw(canvas);
+    }
+}

+ 338 - 0
app/src/main/java/com/quansu/heifengwuliu/view/SideBar.java

@@ -0,0 +1,338 @@
+package com.quansu.heifengwuliu.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+
+import com.quansu.heifengwuliu.R;
+
+import java.util.ArrayList;
+
+
+/**
+ * Created by xianguangjin on 16/6/1.
+ * <p>
+ * 自定义边栏滑动View
+ */
+
+public class SideBar extends View {
+
+    private ArrayList<String> data;
+
+    private Paint paint;
+    private int measuredWidth;
+    private int totalTextHeight;//文本总高度
+    private int gap;
+    private int tvColor;
+    private int tvSelectedColor;
+    private int selectedPos = -1;
+    private int scaledTouchSlop;
+    private OnSelectedListener onSelectedListener;
+    private TextView tipView;//提示位置的TextView
+    private int measuredHeight;
+    private int remainningHeight;
+    private Drawable background;
+
+    public SideBar(Context context) {
+        this(context, null);
+
+    }
+
+    public SideBar(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+
+    }
+
+    public SideBar(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init(context, attrs, defStyleAttr);
+    }
+
+    private void init(Context context, AttributeSet attrs, int defStyleAttr) {
+        TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.SideBar);
+        gap = (int) attributes.getDimension(R.styleable.SideBar_sb_tv_gap, dp2px(context, 5));
+        int tvSize = (int) attributes.getDimension(R.styleable.SideBar_sb_tv_size, dp2px(context, 15));
+        tvColor = attributes.getColor(R.styleable.SideBar_sb_tv_color, Color.WHITE);
+        tvSelectedColor = attributes.getColor(R.styleable.SideBar_sb_tv_selected_color, Color.BLUE);
+
+        background = getBackground();
+        setBackground(null);
+
+        paint = new Paint();
+        paint.setTextSize(tvSize);
+        paint.setColor(tvColor);
+
+        scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+        attributes.recycle();
+    }
+
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        measuredWidth = getMeasuredWidth();
+        measuredHeight = getMeasuredHeight();
+
+        int dataHeight = getDataSize()[1];
+
+        remainningHeight = 0;
+        if (measuredHeight > dataHeight) {//设置的高度比数据高度高
+            remainningHeight = (measuredHeight - dataHeight) / 2;
+        }
+
+        if (data != null) {
+            totalTextHeight = 0;
+            for (int i = 0; i < data.size(); i++) {
+                String str = data.get(i);
+                Rect bounds = new Rect();
+                paint.getTextBounds(str, 0, str.length(), bounds);//获取文本所占用的Rect区域
+                int startX = (measuredWidth - bounds.width() - getPaddingLeft() - getPaddingRight()) / 2 + getPaddingLeft();//文本开始的x坐标,加入了padding处理,并让文字始终是Horizontal方向居中
+                if (i == 0) {
+                    totalTextHeight = bounds.height() + getPaddingTop() + remainningHeight;
+                } else {
+                    totalTextHeight += (bounds.height() + gap);
+                }
+                paint.setColor(selectedPos == i ? tvSelectedColor : tvColor);
+                canvas.drawText(str, startX, totalTextHeight, paint);
+            }
+        }
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int height = MeasureSpec.getSize(heightMeasureSpec);
+        int width = MeasureSpec.getSize(widthMeasureSpec);
+        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+
+        //处理wrap_content是的宽高
+        if (heightMode == MeasureSpec.AT_MOST) {
+            height = getDataSize()[1];
+        }
+
+        if (widthMode == MeasureSpec.AT_MOST) {
+            width = getDataSize()[0] + getPaddingLeft() + getPaddingRight();
+        }
+
+        setMeasuredDimension(width, height);
+    }
+
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        float downY = 0;
+        float moveY = 0;
+        switch (event.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+                downY = event.getY();
+                setSelecteItem(event);
+                break;
+            case MotionEvent.ACTION_MOVE:
+                moveY = event.getY();
+                if (moveY - downY > scaledTouchSlop) {
+                    setSelecteItem(event);
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+                clearState();
+                break;
+        }
+        return true;
+    }
+
+    /**
+     * 回复初始值,清空状态
+     */
+    private void clearState() {
+        selectedPos = -1;
+        if (tipView != null) {
+            tipView.setVisibility(GONE);
+        }
+
+        invalidate();
+    }
+
+    /**
+     * 计算滑动的位置在哪一个文本上,并刷新UI
+     *
+     * @param event
+     */
+
+    private void setSelecteItem(MotionEvent event) {
+        setBackground(background);
+
+        int height = getDataSize()[1] - getPaddingBottom() - getPaddingTop();
+        int itemHeight = height / data.size();
+        int newPos = (int) ((event.getY() - getPaddingTop() - remainningHeight) / itemHeight) - 1;
+        if (newPos != selectedPos && newPos >= 0 && newPos < data.size()) {
+            selectedPos = newPos;
+            String tv = data.get(selectedPos);
+            if (tipView != null) {
+                tipView.setVisibility(VISIBLE);
+                tipView.setText(tv);
+            }
+
+            if (onSelectedListener != null) {
+                onSelectedListener.onSelected(selectedPos, tv);
+            }
+            invalidate();
+        }
+    }
+
+    /**
+     * 获取数据所占用的高度
+     *
+     * @return
+     */
+    private int[] getDataSize() {
+        int width = 0;
+        if (data != null) {
+            totalTextHeight = 0;
+            for (int i = 0; i < data.size(); i++) {
+                String str = data.get(i);
+                Rect bounds = new Rect();
+                paint.getTextBounds(str, 0, str.length(), bounds);
+                width = Math.max(bounds.width(), width);
+                if (i == 0) {
+                    totalTextHeight = bounds.height() + getPaddingTop();
+                } else {
+                    totalTextHeight += (bounds.height() + gap);
+                }
+            }
+        }
+        return new int[]{width, totalTextHeight + getPaddingBottom()};
+    }
+
+
+    /**
+     * 设置数据
+     *
+     * @param data
+     */
+    public void setData(ArrayList<String> data) {
+        this.data = data;
+        invalidate();
+    }
+
+
+    /**
+     * 设置选中文本位置监听器
+     *
+     * @param onSelectedListener
+     */
+    public void setOnSelectedListener(OnSelectedListener onSelectedListener) {
+        this.onSelectedListener = onSelectedListener;
+    }
+
+    public interface OnSelectedListener {
+        void onSelected(int position, String text);
+    }
+
+
+    /**
+     * 设置显示位置的TipView
+     *
+     * @param textView
+     */
+    public void attachTipView(TextView textView) {
+        this.tipView = textView;
+    }
+
+    public int getTvSelectedColor() {
+        return tvSelectedColor;
+    }
+
+    public void setTvSelectedColor(int tvSelectedColor) {
+        this.tvSelectedColor = tvSelectedColor;
+    }
+
+    public int getTvColor() {
+        return tvColor;
+    }
+
+    public void setTvColor(int tvColor) {
+        this.tvColor = tvColor;
+    }
+
+    public int getGap() {
+        return gap;
+    }
+
+    public void setGap(int gap) {
+        this.gap = gap;
+    }
+
+
+    /**
+     * dp转px
+     *
+     * @param context
+     * @param dip
+     *
+     * @return
+     */
+    static public int dp2px(Context context, int dip) {
+        return (int) (dip * getScreenDensity(context) + 0.5f);
+    }
+
+
+    static public float getScreenDensity(Context context) {
+        try {
+            DisplayMetrics dm = new DisplayMetrics();
+            ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
+                    .getMetrics(dm);
+            return dm.density;
+        } catch (Exception e) {
+            return DisplayMetrics.DENSITY_DEFAULT;
+        }
+    }
+
+
+    public void init() {
+        data = new ArrayList<>();
+        data.add("A");
+        data.add("B");
+        data.add("C");
+        data.add("D");
+        data.add("E");
+        data.add("F");
+        data.add("G");
+        data.add("H");
+        data.add("I");
+        data.add("J");
+        data.add("K");
+        data.add("L");
+        data.add("M");
+        data.add("N");
+        data.add("O");
+        data.add("P");
+        data.add("Q");
+        data.add("R");
+        data.add("S");
+        data.add("T");
+        data.add("U");
+        data.add("V");
+        data.add("W");
+        data.add("X");
+        data.add("Y");
+        data.add("Z");
+        data.add("#");
+        invalidate();
+    }
+
+
+
+
+}

+ 9 - 0
app/src/main/java/com/quansu/heifengwuliu/widget/AddressItemView.java

@@ -3,6 +3,7 @@ package com.quansu.heifengwuliu.widget;
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
+import android.view.View;
 import android.widget.EditText;
 import android.widget.LinearLayout;
 import android.widget.TextView;
@@ -10,7 +11,13 @@ import android.widget.TextView;
 import androidx.databinding.DataBindingUtil;
 
 import com.quansu.heifengwuliu.R;
+import com.quansu.heifengwuliu.activity.AddressActivity;
+import com.quansu.heifengwuliu.activity.OneLoginActivity;
+import com.quansu.heifengwuliu.config.MIntentAction;
 import com.quansu.heifengwuliu.databinding.WidgetAddressitemBinding;
+import com.quansu.heifengwuliu.fragment.OwnerSingleFragment;
+import com.ysnows.base.utils.B;
+import com.ysnows.base.utils.UiSwitch;
 import com.ysnows.base.view.BView;
 import com.ysnows.base.view.BaseView;
 
@@ -46,6 +53,8 @@ public class AddressItemView extends BaseLinearLayout {
         }
         binding= DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.widget_addressitem, this,true);
 
+
+
     }
 
 

BIN
app/src/main/res/drawable-xxhdpi/stock_delete.webp


BIN
app/src/main/res/drawable-xxhdpi/stock_serch.webp


+ 96 - 0
app/src/main/res/layout/activity_address.xml

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <data >
+
+    </data >
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:orientation="vertical"
+        android:layout_height="match_parent">
+
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="69dp"
+            android:layout_marginTop="14dp"
+            android:layout_marginRight="68dp"
+            android:orientation="horizontal"
+            >
+
+            <LinearLayout
+                android:id="@+id/ll_one"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:gravity="center"
+                android:orientation="vertical">
+
+                <TextView
+                    android:id="@+id/tv_one"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="发货地址"
+                    android:textColor="#4B3200"
+                    android:textSize="16sp"></TextView>
+
+                <View
+                    android:id="@+id/line_one"
+                    android:layout_width="30dp"
+                    android:layout_height="1dp"
+                    android:layout_marginTop="2dp"
+                    android:background="#4B3200">
+
+                </View>
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/ll_two"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:gravity="center"
+                android:orientation="vertical">
+
+                <TextView
+                    android:id="@+id/tv_two"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="卸货地址"
+                    android:textColor="#5D5E5F"
+                    android:textSize="16sp"></TextView>
+
+                <View
+                    android:id="@+id/line_two"
+                    android:layout_width="30dp"
+                    android:layout_height="1dp"
+                    android:layout_marginTop="2dp"
+                    android:background="#4B3200"
+                    android:visibility="invisible">
+
+                </View>
+
+
+            </LinearLayout>
+
+
+
+        </LinearLayout>
+
+        <androidx.viewpager.widget.ViewPager
+            android:id="@+id/view_pager"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginTop="22dp">
+
+        </androidx.viewpager.widget.ViewPager>
+
+
+
+
+    </LinearLayout>
+</layout >

+ 160 - 0
app/src/main/res/layout/fragment_address.xml

@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="18dp"
+            android:layout_marginTop="12dp"
+            android:layout_marginRight="18dp"
+            android:layout_marginBottom="18dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout
+                android:layout_width="0dp"
+                android:layout_height="40dp"
+                android:layout_weight="1"
+                android:focusable="true"
+                android:focusableInTouchMode="true"
+                android:gravity="center_vertical"
+                android:orientation="horizontal"
+                android:paddingLeft="10dp"
+                android:paddingRight="10dp"
+                app:qmui_backgroundColor="@color/white"
+                app:qmui_borderColor="#BEBEBE"
+                app:qmui_borderWidth="@dimen/dp_1"
+                app:qmui_radius="@dimen/dp_4">
+
+
+                <ImageView
+                    android:layout_width="13dp"
+                    android:layout_height="13dp"
+                    android:src="@drawable/stock_serch">
+
+                </ImageView>
+
+
+                <EditText
+                    android:id="@+id/et_name"
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_marginLeft="15dp"
+                    android:layout_weight="1"
+                    android:background="@null"
+                    android:gravity="center_vertical"
+                    android:hint="请输入要搜索的内容"
+                    android:textColor="#2F2F31"
+                    android:textColorHint="#929390"
+                    android:textSize="14sp"></EditText>
+
+
+                <ImageView
+                    android:id="@+id/iv_delete"
+                    android:layout_width="14dp"
+                    android:layout_height="14dp"
+                    android:layout_marginLeft="10dp"
+                    android:src="@drawable/stock_delete">
+
+                </ImageView>
+
+
+            </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout>
+
+
+            <TextView
+                android:id="@+id/tv_search"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="18dp"
+                android:gravity="center|left"
+                android:text="搜索"
+                android:textColor="#3274F6"
+                android:textSize="15sp">
+
+            </TextView>
+
+        </LinearLayout>
+
+
+        <FrameLayout
+            android:id="@+id/lay_body"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_marginTop="8dp"
+            android:layout_weight="1">
+
+
+            <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+                android:id="@+id/refresh_layout"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/recycler_view"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+                    tools:listitem="@layout/item_address" />
+
+            </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+
+
+            <com.quansu.heifengwuliu.view.CircleTextView
+                android:id="@+id/tv_tip"
+                android:layout_width="80dp"
+                android:layout_height="80dp"
+                android:layout_gravity="center"
+                android:background="#33555555"
+                android:gravity="center"
+                android:textColor="@color/white"
+                android:textSize="18sp"
+                android:visibility="gone"
+                tools:visibility="visible">
+            </com.quansu.heifengwuliu.view.CircleTextView>
+
+            <com.quansu.heifengwuliu.view.SideBar
+                android:id="@+id/sidebar"
+                android:layout_width="15dp"
+                android:layout_height="match_parent"
+                android:layout_gravity="right|center_vertical"
+                android:layout_marginTop="20dp"
+                android:layout_marginRight="6dp"
+                android:layout_marginBottom="20dp"
+                android:background="#00000000"
+                android:paddingLeft="5dp"
+                android:paddingRight="5dp"
+                app:sb_tv_color="#0074e6"
+                app:sb_tv_gap="5dp"
+                app:sb_tv_size="15sp">
+            </com.quansu.heifengwuliu.view.SideBar>
+
+
+        </FrameLayout>
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="50dp"
+            android:background="#5D76F4"
+            android:gravity="center"
+            android:text="添加新地址"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_16">
+
+        </TextView>
+
+
+    </LinearLayout>
+
+</layout>

+ 65 - 0
app/src/main/res/layout/item_address.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools" >
+
+    <data >
+
+        <variable
+            name="item"
+            type="com.quansu.heifengwuliu.model.Msg" />
+
+    </data >
+
+    <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout
+        android:id="@+id/rl_todo"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:paddingLeft="@dimen/dp_10"
+        android:paddingTop="@dimen/dp_10"
+        app:qmui_borderWidth="@dimen/dp_1"
+        app:qmui_borderColor="#BBBBBB"
+        app:qmui_radius="@dimen/dp_2"
+        android:layout_marginStart="@dimen/dp_10"
+        android:layout_marginEnd="@dimen/dp_10"
+        android:layout_marginBottom="@dimen/dp_10"
+        android:paddingRight="@dimen/dp_10" >
+
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:orientation="horizontal"
+            android:layout_height="wrap_content">
+            <TextView
+                android:id="@+id/tv_name"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="#343434"
+                android:textSize="@dimen/sp_16"
+                tools:text="@string/app_name" />
+            <TextView
+                android:id="@+id/tv_mobile"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="#343434"
+                android:layout_marginStart="@dimen/dp_10"
+                android:textSize="@dimen/sp_16"
+                tools:text="18353075657" />
+
+        </LinearLayout>
+
+
+        <TextView
+            android:id="@+id/tv_address"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="#343434"
+            android:layout_marginTop="@dimen/dp_10"
+            android:layout_marginBottom="@dimen/dp_10"
+            android:textSize="@dimen/sp_16"
+            tools:text="山东省临沂市河东区芝麻墩街道金华路XX号" />
+
+
+    </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout >
+</layout >

+ 12 - 0
app/src/main/res/values/styles.xml

@@ -238,4 +238,16 @@
         <item name="android:layout_marginStart" >@dimen/dp_15</item >
         <item name="android:visibility" >visible</item >
     </style >
+
+    <declare-styleable name="SideBar" >
+        <!--字之间Vertical的距离-->
+        <attr name="sb_tv_gap" format="dimension" />
+        <!--字的Size-->
+        <attr name="sb_tv_size" format="dimension" />
+        <!--字的颜色-->
+        <attr name="sb_tv_color" format="color" />
+        <!--选中字的颜色-->
+        <attr name="sb_tv_selected_color" format="color" />
+
+    </declare-styleable >
 </resources >