From e9e0c175f3dbfdd0e5a42e74dc7464383581db0f Mon Sep 17 00:00:00 2001 From: wds Date: Tue, 8 Jun 2021 10:32:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BB=E5=AE=9Dpoi=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/jarRepositories.xml | 45 ++ app/build.gradle | 8 +- app/src/main/AndroidManifest.xml | 2 +- .../outdoor/activity/FragmentManagement.java | 2 +- .../outdoor/activity/UserActivity.java | 3 + .../navinfo/outdoor/fragment/PoiFragment.java | 132 ++++-- .../outdoor/fragment/TreasureFragment.java | 70 ++- .../outdoor/util/BounceZoomScrollView.java | 258 +++++++++++ .../res/drawable/push_chongdianzhuang.png | Bin 0 -> 392 bytes app/src/main/res/drawable/push_poi.png | Bin 0 -> 629 bytes app/src/main/res/drawable/push_qingbao.png | Bin 0 -> 363 bytes app/src/main/res/drawable/push_road.png | Bin 0 -> 507 bytes app/src/main/res/drawable/underline.xml | 2 +- app/src/main/res/layout/poi_fragment.xml | 411 ++++++++++++++++++ app/src/main/res/layout/treasure_fragment.xml | 19 +- .../res/layout/user_attestation_fragment.xml | 17 +- .../main/res/layout/user_data_fragment.xml | 283 ------------ app/src/main/res/layout/withdraw_fragment.xml | 4 +- 18 files changed, 887 insertions(+), 369 deletions(-) create mode 100644 .idea/jarRepositories.xml create mode 100644 app/src/main/java/com/navinfo/outdoor/util/BounceZoomScrollView.java create mode 100644 app/src/main/res/drawable/push_chongdianzhuang.png create mode 100644 app/src/main/res/drawable/push_poi.png create mode 100644 app/src/main/res/drawable/push_qingbao.png create mode 100644 app/src/main/res/drawable/push_road.png create mode 100644 app/src/main/res/layout/poi_fragment.xml delete mode 100644 app/src/main/res/layout/user_data_fragment.xml diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..0f65517 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d139b6c..108b541 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 30 buildToolsVersion "30.0.3" - ndkVersion '23.0.7123448' + // ndkVersion '23.0.7123448' defaultConfig { applicationId "com.navinfo.outdoor" @@ -22,9 +22,9 @@ android { } } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } //efs { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 52a502f..01af8c2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,7 +71,7 @@ - + diff --git a/app/src/main/java/com/navinfo/outdoor/activity/FragmentManagement.java b/app/src/main/java/com/navinfo/outdoor/activity/FragmentManagement.java index a030216..b002fb1 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/FragmentManagement.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/FragmentManagement.java @@ -21,6 +21,7 @@ import com.navinfo.outdoor.fragment.MineFragment; import com.navinfo.outdoor.fragment.PoiFragment; import com.navinfo.outdoor.fragment.PrivilegeFragment; import com.navinfo.outdoor.fragment.RecordFragment; +import com.navinfo.outdoor.fragment.RoadFragment; import com.navinfo.outdoor.fragment.SetFragment; import com.navinfo.outdoor.fragment.TaskExWebFragment; import com.navinfo.outdoor.fragment.TaskExplainFragment; @@ -30,7 +31,6 @@ import com.navinfo.outdoor.fragment.TaskPrefectureFragment; import com.navinfo.outdoor.fragment.RegisterFragment; import com.navinfo.outdoor.fragment.TreasureFragment; import com.navinfo.outdoor.fragment.UserAttestationFragment; -import com.navinfo.outdoor.fragment.RoadFragment; import com.navinfo.outdoor.fragment.WithdrawFragment; import com.gyf.immersionbar.ImmersionBar; import com.navinfo.outdoor.fragment.WithdrawalRecordFragment; diff --git a/app/src/main/java/com/navinfo/outdoor/activity/UserActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/UserActivity.java index 50d6e77..5ed7257 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/UserActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/UserActivity.java @@ -176,6 +176,7 @@ public class UserActivity extends BaseActivity implements View.OnClickListener { Toast.makeText(UserActivity.this, region_id, Toast.LENGTH_SHORT).show(); String tx = opt1tx + " " + opt2tx + " " + opt3tx; region.setText(tx); + } }).setSubmitText("确定")//确定按钮文字 .setCancelText("取消")//取消按钮文字 @@ -242,10 +243,12 @@ public class UserActivity extends BaseActivity implements View.OnClickListener { Province_AreaList.add(City_AreaList);//添加该省所有地区数据 city_AreaList.add(AreaList);//添加该省所有地区数据的bean } + /** * 添加城市数据 */ options2Items.add(CityList); + /** * 添加地区数据 */ diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java index 092973a..de585b3 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java @@ -1,64 +1,108 @@ package com.navinfo.outdoor.fragment; +import android.content.Intent; +import android.graphics.Bitmap; import android.os.Bundle; - -import androidx.fragment.app.Fragment; - -import android.view.LayoutInflater; +import android.view.KeyEvent; import android.view.View; -import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; import com.navinfo.outdoor.R; +import com.navinfo.outdoor.base.BaseFragment; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; + +import static android.app.Activity.RESULT_OK; /** - * 寻宝-点击上传弹窗点击poi + * 记录的Fragment + * 2021-5-25 */ -public class PoiFragment extends Fragment { +public class PoiFragment extends BaseFragment implements View.OnClickListener { - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; + private EditText editDescribe; + private ImageView imagePanorama; + private ImageView imageName; + private ImageView imageInternalPhotos; + private ImageView imageCard; + private ImageView imageElse; - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; - - public PoiFragment() { - // Required empty public constructor + @Override + protected int getLayout() { + return R.layout.poi_fragment; } - - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment PoiFragment. - */ - // TODO: Rename and change types and number of parameters - public static PoiFragment newInstance(String param1, String param2) { - PoiFragment fragment = new PoiFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - fragment.setArguments(args); - return fragment; + @Override + protected void initView() { + super.initView(); + editDescribe = findViewById(R.id.edit_describe); + imagePanorama = findViewById(R.id.image_panorama); + imagePanorama.setOnClickListener(this::onClick); + imageName = findViewById(R.id.image_name); + imageName.setOnClickListener(this::onClick); + imageInternalPhotos = findViewById(R.id.image_internal_photos); + imageInternalPhotos.setOnClickListener(this::onClick); + imageCard = findViewById(R.id.image_card); + imageCard.setOnClickListener(this::onClick); + imageElse = findViewById(R.id.image_else); + imageElse.setOnClickListener(this::onClick); + } + @Override + protected void initData() { + super.initData(); } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); + public void onClick(View v) { + switch (v.getId()){ + case R.id.image_panorama: + Intent intentPanorama = new Intent("android.media.action.IMAGE_CAPTURE"); + startActivityForResult(intentPanorama, 101); + break; + case R.id.image_name: + Intent intentName = new Intent("android.media.action.IMAGE_CAPTURE"); + startActivityForResult(intentName, 102); + break; + case R.id.image_internal_photos: + Intent intentInternal = new Intent("android.media.action.IMAGE_CAPTURE"); + startActivityForResult(intentInternal, 103); + break; + case R.id.image_card: + Intent intentCard = new Intent("android.media.action.IMAGE_CAPTURE"); + startActivityForResult(intentCard, 104); + break; + case R.id.image_else: + Intent intentElse = new Intent("android.media.action.IMAGE_CAPTURE"); + startActivityForResult(intentElse, 105); + break; } } - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_poi, container, false); + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 101 && resultCode == RESULT_OK) { + Bundle extras = data.getExtras();//从Intent中获取附加值 + Bitmap bitmap = (Bitmap) extras.get("data");//从附加值中获取返回的图像 + imagePanorama.setImageBitmap(bitmap);//显示图像 + } else if (requestCode == 102 && resultCode == RESULT_OK) { + Bundle extras = data.getExtras();//从Intent中获取附加值 + Bitmap bitmap = (Bitmap) extras.get("data");//从附加值中获取返回的图像 + imageName.setImageBitmap(bitmap);//显示图像 + }else if (requestCode == 103 && resultCode == RESULT_OK) { + Bundle extras = data.getExtras();//从Intent中获取附加值 + Bitmap bitmap = (Bitmap) extras.get("data");//从附加值中获取返回的图像 + imageInternalPhotos.setImageBitmap(bitmap);//显示图像 + }else if (requestCode == 104 && resultCode == RESULT_OK) { + Bundle extras = data.getExtras();//从Intent中获取附加值 + Bitmap bitmap = (Bitmap) extras.get("data");//从附加值中获取返回的图像 + imageCard.setImageBitmap(bitmap);//显示图像 + }else if (requestCode == 105 && resultCode == RESULT_OK) { + Bundle extras = data.getExtras();//从Intent中获取附加值 + Bitmap bitmap = (Bitmap) extras.get("data");//从附加值中获取返回的图像 + imageElse.setImageBitmap(bitmap);//显示图像 + } } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java index 30af824..37b2934 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java @@ -16,12 +16,16 @@ import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.fragment.app.FragmentManager; +import com.kongzue.dialog.util.DialogSettings; +import com.kongzue.dialog.v3.ShareDialog; import com.navinfo.outdoor.R; import com.navinfo.outdoor.activity.FragmentManagement; import com.navinfo.outdoor.api.Constant; @@ -44,6 +48,9 @@ import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; +import java.util.ArrayList; +import java.util.List; + import static com.lzy.okgo.utils.HttpUtils.runOnUiThread; /** @@ -61,6 +68,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen private MyLocationStyle locationStyle; private OnLocationChangedListener locationChangedListener; private ImageView ivLocation; + private ImageView ivSubmit; private ImageView ivRefish; @Override @@ -73,6 +81,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen super.initView(); ivRefish = findViewById(R.id.iv_refrish); ivRefish.setOnClickListener(this::onClick); + ivSubmit = findViewById(R.id.iv_submit); + ivSubmit.setOnClickListener(this::onClick); treasureMap = (MapView) findViewById(R.id.treasure_map); tencentMap = treasureMap.getMap(); cbMapType = (CheckBox) findViewById(R.id.cb_map_type); @@ -207,19 +217,53 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen tencentMap.animateCamera(cameraUpdateOut); break; case R.id.iv_location://定位: - Constant.currentLocation.getLongitude(); - CameraUpdate cameraSigma = - CameraUpdateFactory.newCameraPosition(new CameraPosition( - new LatLng(Constant.currentLocation.getLatitude(), Constant.currentLocation.getLongitude()), //中心点坐标,地图目标经纬度 - 19, //目标缩放级别 - 0, //目标倾斜角[0.0 ~ 45.0] (垂直地图时为0) - 0)); //目标旋转角 0~360° (正北方为0) - tencentMap.animateCamera(cameraSigma); + if (Constant.currentLocation!=null){ + Constant.currentLocation.getLongitude(); + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(Constant.currentLocation.getLatitude(), Constant.currentLocation.getLongitude()), //中心点坐标,地图目标经纬度 + 19, //目标缩放级别 + 0, //目标倾斜角[0.0 ~ 45.0] (垂直地图时为0) + 0)); //目标旋转角 0~360° (正北方为0) + tencentMap.animateCamera(cameraSigma); + }else { + Toast.makeText(getActivity(), "无定位", Toast.LENGTH_SHORT).show(); + checkNetWork(); + } + break; - case R.id.iv_refrish:// - Intent road = new Intent(getActivity(), FragmentManagement.class); - road.putExtra("tag",28); - startActivity(road); + case R.id.iv_submit://弹窗 + //分享 + CharSequence title = "请选择上报类型"; + List itemList = new ArrayList<>(); + itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_poi, "POI")); + itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_road, "道路")); + itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_chongdianzhuang, "充电站")); + itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_qingbao, "其他")); + ShareDialog.show((AppCompatActivity) getActivity(), itemList, new ShareDialog.OnItemClickListener() { + @Override + public boolean onClick(ShareDialog shareDialog, int index, ShareDialog.Item item) { + switch (index){ + case 0: + Intent poiIntent = new Intent(getActivity(), FragmentManagement.class); + poiIntent.putExtra("tag",27); + startActivity(poiIntent); + break; + case 1: + Intent roadIntent = new Intent(getActivity(), FragmentManagement.class); + roadIntent.putExtra("tag",28); + startActivity(roadIntent); + break; + case 2: + case 3: + Toast.makeText(getContext(), item.getText(), Toast.LENGTH_SHORT).show(); + break; + } + return false; + } + }).setTitle(title); + break; + case R.id.iv_refrish: break; } } @@ -257,7 +301,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen requestPermissions(permission, 0); } else { // 此处为某些5.0动态权限的手机 - //goSystemLocationActivity(); // TODO =======待删除====== + // goSystemLocationActivity(); // TODO =======待删除====== tipPermissionAlertDialog(); } } diff --git a/app/src/main/java/com/navinfo/outdoor/util/BounceZoomScrollView.java b/app/src/main/java/com/navinfo/outdoor/util/BounceZoomScrollView.java new file mode 100644 index 0000000..12242c4 --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/util/BounceZoomScrollView.java @@ -0,0 +1,258 @@ +package com.navinfo.outdoor.util; + + +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; +import android.content.Context; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.TranslateAnimation; +import android.widget.ScrollView; + +/** + * 注意使用的时候需要放大的view,一般是第一个RelativeLayout或者LinearLayout。要加上 android:layout_gravity="center_horizontal" + + */ + +public class BounceZoomScrollView extends ScrollView { + + private static final String TAG = "BounceScrollView"; + + + //----头部收缩属性-------- + + // 记录首次按下位置 + private float mFirstPosition = 0; + // 头部图片是否正在放大 + private Boolean mScaling = false; + private View dropZoomView;//需要被放大的view + private int dropZoomViewWidth; + private int dropZoomViewHeight; + //----头部收缩属性end-------- + + //------尾部收缩属性-------- + private View inner;// 子View + private float y;// 点击时y坐标 + private Rect normal = new Rect();// 矩形(这里只是个形式,只是用于判断是否需要动画.) + + private boolean isCount = false;// 是否开始计算 + //最后的坐标 + private float lastX = 0; + private float lastY = 0; + //当前坐标 + private float currentX = 0; + private float currentY = 0; + //移动的坐标量 + private float distanceX = 0; + private float distanceY = 0; + private boolean upDownSlide = false; //判断上下滑动的flag + //------尾部收缩属性end-------- + + public BounceZoomScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + //初始化 + private void init() { + setOverScrollMode(OVER_SCROLL_NEVER); + + if (getChildAt(0) != null) { + inner = getChildAt(0);//这个是底部收缩的view + + //头部收缩的 + ViewGroup vg = (ViewGroup) getChildAt(0); + if (vg.getChildAt(0) != null) { + dropZoomView = vg.getChildAt(0); + } + } + } + + + /*** + * 生成视图工作完成.该函数在生成视图的最后调用,在所有子视图添加完之后. 即使子类覆盖了 onFinishInflate + * 方法,也应该调用父类的方法,使该方法得以执行. + */ + @Override + protected void onFinishInflate() { + //初始化 + init(); + super.onFinishInflate(); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + + //这里只是计算尾部坐标 + currentX = ev.getX(); + currentY = ev.getY(); + switch (ev.getAction()) { + case MotionEvent.ACTION_MOVE: + distanceX = currentX - lastX; + distanceY = currentY - lastY; + if (Math.abs(distanceX) < Math.abs(distanceY) && Math.abs(distanceY) > 12) { + upDownSlide = true; + } + break; + } + lastX = currentX; + lastY = currentY; + if (upDownSlide && inner != null) commOnTouchEvent(ev); + return super.dispatchTouchEvent(ev); + } + + /*** + * 触摸事件 + * + * @param ev + */ + public void commOnTouchEvent(MotionEvent ev) { + + //头部缩放计算 + if (dropZoomViewWidth <= 0 || dropZoomViewHeight <= 0) { + dropZoomViewWidth = dropZoomView.getMeasuredWidth(); + dropZoomViewHeight = dropZoomView.getMeasuredHeight(); + } + + switch (ev.getAction()) { + + case MotionEvent.ACTION_UP: + //手指离开后头部恢复图片 + mScaling = false; + replyImage(); + + // 手指松开尾部恢复 + if (isNeedAnimation()) { + animation(); + isCount = false; + } + clear0(); + break; + + //这里头尾分开处理,互不干扰 + case MotionEvent.ACTION_MOVE: + //尾部处理 + final float preY = y;// 按下时的y坐标 + float nowY = ev.getY();// 时时y坐标 + int deltaY = (int) (preY - nowY);// 滑动距离 + if (!isCount) { + deltaY = 0; // 在这里要归0. + } + y = nowY; + // 当滚动到最上或者最下时就不会再滚动,这时移动布局 + if (isNeedMove()) { + // 初始化头部矩形 + if (normal.isEmpty()) { + // 保存正常的布局位置 + normal.set(inner.getLeft(), inner.getTop(), + inner.getRight(), inner.getBottom()); + } + // 移动布局 + inner.layout(inner.getLeft(), inner.getTop() - deltaY / 2, + inner.getRight(), inner.getBottom() - deltaY / 2); + } + isCount = true; + //尾部处理end + + //头部处理 + if (!mScaling) { + if (getScrollY() == 0) { + mFirstPosition = ev.getY();// 滚动到顶部时记录位置,否则正常返回 + } else { + break; + } + } + int distance = (int) ((ev.getY() - mFirstPosition) * 0.6); // 滚动距离乘以一个系数 + if (distance < 0) { // 当前位置比记录位置要小,正常返回 + break; + } + // 处理放大 + mScaling = true; + setZoom(1 + distance); + //头部处理end + + break; + + } + } + + /*** + * 回缩动画,尾部往下缩动画 + */ + public void animation() { + // 开启移动动画 + TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(), + normal.top); + ta.setDuration(200); + inner.startAnimation(ta); + // 设置回到正常的布局位置 + inner.layout(normal.left, normal.top, normal.right, normal.bottom); + + normal.setEmpty(); + + } + + // 是否需要开启动画 + public boolean isNeedAnimation() { + return !normal.isEmpty(); + } + + + // 回弹动画,header往上缩动画 (使用了属性动画) + public void replyImage() { + final float distance = dropZoomView.getMeasuredWidth() - dropZoomViewWidth; + + // 设置动画 + ValueAnimator anim = ObjectAnimator.ofFloat(0.0F, 1.0F).setDuration((long) (distance * 0.7)); + + anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float cVal = (Float) animation.getAnimatedValue(); + setZoom(distance - ((distance) * cVal)); + } + }); + anim.start(); + + } + + //头部缩放 + public void setZoom(float s) { + if (dropZoomViewHeight <= 0 || dropZoomViewWidth <= 0) { + return; + } + ViewGroup.LayoutParams lp = dropZoomView.getLayoutParams(); + lp.width = (int) (dropZoomViewWidth + s); + lp.height = (int) (dropZoomViewHeight * ((dropZoomViewWidth + s) / dropZoomViewWidth)); + dropZoomView.setLayoutParams(lp); + } + + /*** + * 是否需要移动布局 inner.getMeasuredHeight():获取的是控件的总高度 + * + * getHeight():获取的是屏幕的高度 + * + * @return + */ + public boolean isNeedMove() { + int offset = inner.getMeasuredHeight() - getHeight(); + int scrollY = getScrollY(); + // 0是顶部,后面那个是底部 + if (scrollY == 0 || scrollY == offset) { + return true; + } + return false; + } + + //清理尾部属性值 + private void clear0() { + lastX = 0; + lastY = 0; + distanceX = 0; + distanceY = 0; + upDownSlide = false; + } + +} diff --git a/app/src/main/res/drawable/push_chongdianzhuang.png b/app/src/main/res/drawable/push_chongdianzhuang.png new file mode 100644 index 0000000000000000000000000000000000000000..87d6fae3c17cf179eb9a97ecdea6407de701ed8b GIT binary patch literal 392 zcmV;30eAk1P)!u*iW|Ph>zAt^ZV?~?5n`&n5Euqm)TW|)k63D z^6vTM)$hBl;d!0gVE6p<=JwX&^w8e(%9`3+>i68x?X$({pswM2tl)T`++%>O$%Oy_ z00eYWPE!DYz(DVS>%;&60L@86K~zY`?b1n(!axv2(RLF>O&&339`Aoi2&fIHgd7VN zApZU-mCF44tZ?t64PN#$?=)UFgAJ+)&bUD{wYg@!Vk#0B9_AFON!E085G$YQ8qD zV~XYp>B@7biNq|?yDW8Q&D&{07GAHVwXZGCO8mqqRrjR%SbOHl<5eMT>(`v(aC`E` zF#6~3Nzv~X9CI!-iK%&0Rn*8g; z;cpY#KV-xLg}*JC_y5<=KeuoE*t+4*-P=EQZuz!!{>O^kzaQTJzI*%o`jsDY6951H z{p;khpC^too9@d6SymF{7tHYN_!0J>T@|uoJC_AtJT^rRD6!eo#WBR=_}j~G`I;0& z8WIIXe_0iDDQtQ7->kSN#mM~Je6y^5`zwz%I0x5GFWP<6mzB+I_2DZu`Tx@rR@!Zz z`t^lc`@KnLGfM76^2?sR!M@}c^Uh9KkSw=}49auaul5)SJ!q-!_Hbot`e8T2Lw{v)gFF*+?LC7@ r+kRh)dH%nBmdKp1J={0{xaFHH3%NY^$IatF=QDV^`njxgN@xNAW8k~R literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/push_road.png b/app/src/main/res/drawable/push_road.png new file mode 100644 index 0000000000000000000000000000000000000000..b7840ee3c4cabbbcb1f590e9cfdfbb60901aef09 GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^#vshW3=*k7AOWNT1AIbUfpqY`JD~?21n;|-d;5Rz zzPlm&?*#9?3uFZCyBoUyK9B@*BMv?ViUjYy7X(y%=x)&7J0T$U-OvN~g7<>dhwQr> zzV9ATe1lne63|eok|4iehDDZ@>^mdA-k2eAY`W~yv{u!pZqHnwTx`>qlF8{}U|_WO zba4#vIDYl=?JQD?`|LZ@$?h(1ZxxAmE7e4njGSX?e_s_q|`)5tq z?58~EPW(*Ld>E-Wt++JJ>U8JJ?!_{5XHI^4X63#9U)P@9nDR;?U~+Q*l@2CT%WX@J zZFlhPn;V>L)EG6#)ZC1@LuRczx6p~FM;?m{uQ>X1*Yg+#rsF3c6iGCm_-OP?#!aCp zX2N++dG}pRPl^}WX*t-Xhn4F(=%ojl3%K;Ha~F3J*uHs%Ei;sDnSJrz2F0Qh+g%Dx zCpw?Thc(EYi?Msd(z*D{awTnt2Rn8)T|VdGXKh|^OVXx~UupUKRRSu0d*xD9JLasM z$H_AB^NMsO$2;eO&YxlFJpB41D<@0ex^{6D0n3M}X%E|uJpB5iiAAXWbzoV;k&9Iu p6q??>PpykfU-ruK>>tlMM%^hzSA%@_m;(cx!PC{xWt~$(69DMU>2m-8 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/underline.xml b/app/src/main/res/drawable/underline.xml index 06334bc..784bd38 100644 --- a/app/src/main/res/drawable/underline.xml +++ b/app/src/main/res/drawable/underline.xml @@ -3,5 +3,5 @@ android:shape="rectangle"> + android:color="#D1D0CF"/> \ No newline at end of file diff --git a/app/src/main/res/layout/poi_fragment.xml b/app/src/main/res/layout/poi_fragment.xml new file mode 100644 index 0000000..b2c92c1 --- /dev/null +++ b/app/src/main/res/layout/poi_fragment.xml @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +