取消状态隐藏三个框

打分方块的离场动画
评分失败后可以重试
网络接口注释
This commit is contained in:
yangyakun
2022-05-18 15:03:40 +08:00
parent 104017f775
commit 3195be09e9
13 changed files with 351 additions and 54 deletions

View File

@@ -42,6 +42,7 @@ import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCal
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback;
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst;
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
@@ -701,7 +702,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
});
}
public void arrivedAndScore(int score,ITaxiPassengerCommonCallback commonCallback) {
public void arrivedAndScore(int score, ITaxiPassengerCommonValueCallback<Boolean> commonCallback) {
if (mCurrentOCHOrder == null) return;
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route--- checkPhoneAndUpdateStatus");
TaxiPassengerServiceManager.getInstance().arrivedAndScore(mContext,mCurrentOCHOrder.orderNo,
@@ -710,13 +711,24 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
public void onSuccess(TaxiPassengerBaseRespBean data) {
ToastUtils.showLong("评分成功");
if(commonCallback!=null) {
commonCallback.onCommonCallback();
commonCallback.onCommonCallback(true);
}
}
@Override
public void onError() {
ToastUtils.showLong("网络错误请稍后再试");
if(commonCallback!=null) {
commonCallback.onCommonCallback(false);
}
}
@Override
public void onFail(int code, String msg) {
ToastUtils.showLong(msg);
if(commonCallback!=null) {
commonCallback.onCommonCallback(false);
}
}
});
}

View File

@@ -68,7 +68,7 @@ interface TaxiPassengerServiceApi {
Observable<TaxiPassengerQueryOrderRouteResp> queryOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo);
/**
* 通过orderNo查询订单信息用于本地已经有orderNo时
* 提交用户输入的手机后4位、并进行状态扭转
* @param data
* @return
*/
@@ -77,7 +77,7 @@ interface TaxiPassengerServiceApi {
Observable<TaxiPassengerBaseRespBean> checkPhoneAndUpdateOrderStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerCheckPhoneUpdateOrderReqBean data);
/**
* 通过orderNo查询订单信息用于本地已经有orderNo时
* 对订单进行打分 1-5分
* @param data
* @return
*/

View File

@@ -19,6 +19,7 @@ import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback;
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel;
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel;
@@ -145,7 +146,12 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
private void updateOrderView(TaxiPassengerOrderQueryRespBean.Result order) {
CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"updateOrderView = "+order.orderStatus);
if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == order.orderStatus){
runOnUIThread(() -> mView.showOrHideServingOrderFragment(false));
runOnUIThread(() -> {
mView.showOrHideServingOrderFragment(false);
mView.showOrHidePressengerCheckPager(false, "",
"", "", "", "");
mView.showOrHideArrivedEndLayout(false,"");
});
TaxiPassengerModel.getInstance().recoverNaviInfo();
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
return;
@@ -196,10 +202,11 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
* @param score 分数
*/
public void arrivedAndScore(int score){
TaxiPassengerModel.getInstance().arrivedAndScore(score, new ITaxiPassengerCommonCallback() {
TaxiPassengerModel.getInstance().arrivedAndScore(score, new ITaxiPassengerCommonValueCallback<Boolean>() {
@Override
public void onCommonCallback() {
mView.showOrHideArrivedEndLayout(false,"");
public void onCommonCallback(Boolean aBoolean) {
mView.showArrivedEndLayout2Thank(aBoolean);
}
});
}

View File

@@ -1,15 +1,18 @@
package com.mogo.och.taxi.passenger.ui
import android.animation.*
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.ImageView
import android.widget.RelativeLayout
import android.widget.TextView
import com.amap.api.navi.view.PoiInputSearchWidget
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils
import com.mogo.och.common.module.wigets.OCHBorderShadowLayout
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback
@@ -29,6 +32,181 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener {
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
private lateinit var mArrivedEndStation: TextView
private lateinit var tvFeel: TextView
private lateinit var ochShadowLayout: OCHBorderShadowLayout
private lateinit var ochThankShadowLayout: OCHBorderShadowLayout
private lateinit var ivStarFirst: ImageView
private lateinit var ivStarSecond: ImageView
private lateinit var ivStarThird: ImageView
private lateinit var ivStarFourth: ImageView
private lateinit var ivStarFifth: ImageView
var taxiPassengerCommonValueCallback: ITaxiPassengerCommonValueCallback<Int>?=null
var trAnimation: Animation = AnimationUtils.loadAnimation(
context, R.anim.left_to_right
)
var troutAnimation: Animation = AnimationUtils.loadAnimation(
context, R.anim.right_to_left
)
var alphaAnimation: Animation = AnimationUtils.loadAnimation(
context, R.anim.alpha_hide_show
)
private var allStartOrdered = mutableListOf<ImageView>()
private fun initView(context: Context) {
d(SceneConstant.M_TAXI_P + TAG, "initView")
LayoutInflater.from(context).inflate(R.layout.taxi_p_arrived_end_panel, this, true)
mArrivedEndStation = findViewById(R.id.arrived_end_station)
tvFeel = findViewById(R.id.tv_feel)
ochShadowLayout = findViewById(R.id.och_shadow_layout)
ochThankShadowLayout = findViewById(R.id.och_thank_shadow_layout)
allStartOrdered = mutableListOf<ImageView>()
initScore()
findViewById<View>(R.id.tv_please_score).setOnClickListener(this)
// debug 弹出
mArrivedEndStation.setOnLongClickListener {
showThanksPageWithAnimation(true)
false
}
}
private fun initScore() {
ivStarFirst = findViewById(R.id.iv_star_first)
ivStarSecond = findViewById(R.id.iv_star_second)
ivStarThird = findViewById(R.id.iv_star_third)
ivStarFourth = findViewById(R.id.iv_star_fourth)
ivStarFifth = findViewById(R.id.iv_star_fifth)
ivStarFirst.setOnClickListener(this)
ivStarSecond.setOnClickListener(this)
ivStarThird.setOnClickListener(this)
ivStarFourth.setOnClickListener(this)
ivStarFifth.setOnClickListener(this)
allStartOrdered.add(ivStarFirst)
allStartOrdered.add(ivStarSecond)
allStartOrdered.add(ivStarThird)
allStartOrdered.add(ivStarFourth)
allStartOrdered.add(ivStarFifth)
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.tv_please_score -> {
taxiPassengerCommonValueCallback?.onCommonCallback(2)
}
R.id.iv_star_first -> {commitAndStartAnimation(1,"不满意")}
R.id.iv_star_second -> {commitAndStartAnimation(2,"不满意")}
R.id.iv_star_third -> {commitAndStartAnimation(3,"一般")}
R.id.iv_star_fourth -> {commitAndStartAnimation(4,"舒适")}
R.id.iv_star_fifth -> {commitAndStartAnimation(5,"舒适")}
else -> {}
}
}
private fun commitAndStartAnimation(fraction: Int,title:String) {
tvFeel.text = title
startStartAnimation(fraction)
allStartOrdered.forEach {
it.isEnabled = false
}
}
private var currentAnimarion = 0
private var maxIndex = 0
private fun startStartAnimation(fraction: Int) {
currentAnimarion = 0
maxIndex = fraction-1
try {
animation(fraction)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun animation(fraction: Int) {
val showView = allStartOrdered[currentAnimarion]
showView.setImageResource(R.drawable.taxi_p_passenger_star_check)
val alpha = ObjectAnimator.ofFloat(showView, "alpha", 0.1f, 1f)
.setDuration(120)
alpha.addUpdateListener(object : ValueAnimator.AnimatorUpdateListener{
var isStart = false
override fun onAnimationUpdate(animation: ValueAnimator?) {
val animatedValue = animation?.getAnimatedValue("alpha")
animatedValue as Float
if(animatedValue>0.45&&!isStart){
isStart = true
//开始下一个
if(currentAnimarion==maxIndex){
return
}
currentAnimarion++
animation(fraction)
}
}
})
val keyframe1 = Keyframe.ofFloat(0f,1f)
val keyframe3 = Keyframe.ofFloat(0.9f,1.2f)
val keyframe4 = Keyframe.ofFloat(1f,1f)
val holderX = PropertyValuesHolder.ofKeyframe(
"scaleX", keyframe1, keyframe3, keyframe4
)
val holderY = PropertyValuesHolder.ofKeyframe(
"scaleY", keyframe1, keyframe3, keyframe4
)
val scaleX = ObjectAnimator.ofPropertyValuesHolder(showView, holderX).setDuration(240)
val scaleY = ObjectAnimator.ofPropertyValuesHolder(showView, holderY).setDuration(240)
val set = AnimatorSet()
set.play(scaleX).with(scaleY).with(alpha)
if(currentAnimarion==maxIndex) {
// 最后一个动画结束后提交积分
set.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
super.onAnimationEnd(animation)
taxiPassengerCommonValueCallback?.onCommonCallback(fraction)
}
})
}
set.start()
}
fun setDataAndStartAnimation(endSiteAddr: String?) {
mArrivedEndStation.text = endSiteAddr
ochShadowLayout.startAnimation(trAnimation)
allStartOrdered.forEach {
it.setImageResource(R.drawable.taxi_p_passenger_star)
it.isEnabled = true
}
}
fun showThanksPageWithAnimation(isSuccess:Boolean) {
if(!isSuccess){
tvFeel.text = ""
allStartOrdered.forEach {
it.setImageResource(R.drawable.taxi_p_passenger_star)
it.isEnabled = true
}
return
}
troutAnimation.setAnimationListener(object :PoiInputSearchWidget.AnimationListenerAdapter(){
override fun onAnimationEnd(p0: Animation?) {
ochShadowLayout.visibility = View.GONE
ochThankShadowLayout.startAnimation(alphaAnimation)
ochThankShadowLayout.visibility = View.VISIBLE
}
})
ochShadowLayout.startAnimation(troutAnimation)
}
companion object {
const val TAG = "TaxiPassengerArrivedView"
}
@@ -40,39 +218,5 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener {
e.printStackTrace()
}
}
private lateinit var mArrivedEndStation: TextView
private lateinit var ochShadowLayout: OCHBorderShadowLayout
var taxiPassengerCommonValueCallback: ITaxiPassengerCommonValueCallback<Int>?=null
var trAnimation = AnimationUtils.loadAnimation(
context, R.anim.left_to_right
)
private fun initView(context: Context) {
d(SceneConstant.M_TAXI_P + TAG, "initView")
LayoutInflater.from(context).inflate(R.layout.taxi_p_arrived_end_panel, this, true)
mArrivedEndStation = findViewById(R.id.arrived_end_station)
ochShadowLayout = findViewById(R.id.och_shadow_layout)
findViewById<View>(R.id.tv_please_score).setOnClickListener(this)
findViewById<View>(R.id.arrived_end_station_title).setOnLongClickListener {
OverlayViewUtils.dismissOverlayView(this)
false
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.tv_taxi_passenger_number_one -> {
taxiPassengerCommonValueCallback?.onCommonCallback(2)
}
else -> {}
}
}
fun setDataAndStartAnimation(endSiteAddr: String?) {
mArrivedEndStation.text = endSiteAddr
ochShadowLayout.startAnimation(trAnimation)
}
}

View File

@@ -2,13 +2,9 @@ package com.mogo.och.taxi.passenger.ui;
import android.os.Handler;
import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentTransaction;
@@ -27,7 +23,6 @@ import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.constants.DataTypes;
import com.mogo.och.taxi.passenger.R;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback;
import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter;
import java.lang.ref.WeakReference;
@@ -305,4 +300,11 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
e.printStackTrace();
}
}
public void showArrivedEndLayout2Thank(boolean isSuccess) {
if(mArrivedEndView.get()==null){
initArrivedView();
}
mArrivedEndView.get().showThanksPageWithAnimation(isSuccess);
}
}

View File

@@ -85,10 +85,6 @@ class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener {
tvTaxiPassengerNumberThird.setOnClickListener(this)
tvTaxiPassengerNumberFourth.setOnClickListener(this)
findViewById<TextView>(R.id.tv_hello).setOnLongClickListener {
OverlayViewUtils.dismissOverlayView(this)
false
}
}
override fun onClick(v: View?) {

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:startOffset="500" >
<translate
android:duration="1000"
android:fromXDelta="0"
android:toXDelta="-110%"/>
</set>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -102,8 +102,139 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv_star_first"
android:layout_marginTop="@dimen/dp_44"
android:layout_marginStart="@dimen/dp_34"
app:layout_constraintTop_toBottomOf="@+id/tv_please_score"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_star_second"
android:src="@drawable/taxi_p_passenger_star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv_star_second"
app:layout_constraintTop_toTopOf="@+id/iv_star_first"
app:layout_constraintStart_toEndOf="@+id/iv_star_first"
app:layout_constraintEnd_toStartOf="@+id/iv_star_third"
android:src="@drawable/taxi_p_passenger_star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv_star_third"
app:layout_constraintTop_toTopOf="@+id/iv_star_second"
app:layout_constraintStart_toEndOf="@+id/iv_star_second"
app:layout_constraintEnd_toStartOf="@+id/iv_star_fourth"
android:src="@drawable/taxi_p_passenger_star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv_star_fourth"
app:layout_constraintTop_toTopOf="@+id/iv_star_third"
app:layout_constraintStart_toEndOf="@+id/iv_star_third"
app:layout_constraintEnd_toStartOf="@+id/iv_star_fifth"
android:src="@drawable/taxi_p_passenger_star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv_star_fifth"
app:layout_constraintTop_toTopOf="@+id/iv_star_fourth"
app:layout_constraintStart_toEndOf="@+id/iv_star_fourth"
android:src="@drawable/taxi_p_passenger_star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv_star_hide"
app:layout_constraintTop_toTopOf="@+id/iv_star_fourth"
app:layout_constraintStart_toEndOf="@+id/iv_star_fourth"
android:src="@drawable/taxi_p_passenger_star"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_feel"
app:layout_constraintTop_toTopOf="@+id/iv_star_hide"
app:layout_constraintBottom_toBottomOf="@+id/iv_star_hide"
app:layout_constraintStart_toEndOf="@+id/iv_star_fifth"
android:textColor="#FFD868"
android:textSize="46px"
tools:text="太差了"
android:layout_marginStart="@dimen/dp_35"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.mogo.och.common.module.wigets.OCHBorderShadowLayout>
<com.mogo.och.common.module.wigets.OCHBorderShadowLayout
android:id="@+id/och_thank_shadow_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_109"
android:layout_marginBottom="@dimen/dp_110"
app:bgColor="@color/taxi_p_map_bg"
app:blurRadius="@dimen/dp_60"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:shadowColor="#80000000"
app:shadowRadius="60px"
android:visibility="gone"
app:shadow_position="outer"
app:xOffset="0px"
app:yOffset="0px">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="@dimen/dp_867"
android:layout_height="@dimen/dp_300"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/bg_taxi_p_arrived_info"
app:layout_constraintStart_toStartOf="parent">
<ImageView
app:layout_constraintTop_toTopOf="parent"
android:src="@drawable/taxi_p_arrived_end_light"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
app:layout_constraintBottom_toBottomOf="parent"
android:src="@drawable/taxi_p_arrived_end_light"
app:layout_constraintStart_toStartOf="parent"
android:rotation="180"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_thank_you"
app:layout_constraintStart_toStartOf="@+id/tv_seeyou_next_time"
app:layout_constraintBottom_toTopOf="@+id/tv_seeyou_next_time"
android:text="感谢您的反馈"
android:textColor="@android:color/white"
android:layout_marginBottom="@dimen/dp_21"
android:textSize="@dimen/dp_46"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_seeyou_next_time"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/dp_63"
android:layout_marginBottom="@dimen/dp_74"
android:text="期待与您下次相遇!"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_56"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.mogo.och.common.module.wigets.OCHBorderShadowLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -6,8 +6,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/taxi_p_passenger_check_panel_bg"
android:clickable="true"
android:focusable="true"
tools:ignore="MissingDefaultResource">
<ImageView