Commit bc3d68ba authored by zhang_z's avatar zhang_z

动画;

parent 6244d00b
...@@ -76,10 +76,10 @@ public class EditorFragment extends BaseFragment<SsskuPresenter, FragmentSsskuEd ...@@ -76,10 +76,10 @@ public class EditorFragment extends BaseFragment<SsskuPresenter, FragmentSsskuEd
mOnFocusChangeListener = (view, b) -> { mOnFocusChangeListener = (view, b) -> {
if (view instanceof EditText) { if (view instanceof EditText) {
EditText editText = (EditText) view; EditText editText = (EditText) view;
if (b && editText.getText().toString().equals("0.0")) { if (b && editText.getText().toString().equals("0.00")) {
editText.setText(""); editText.setText("");
} else if (!b && editText.getText().length() == 0) { } else if (!b && editText.getText().length() == 0) {
editText.setText("0.0"); editText.setText("0.00");
} }
} }
}; };
......
...@@ -52,10 +52,10 @@ public class PriceFragment extends BaseFragment<SsskuPresenter, FragmentSsskuPri ...@@ -52,10 +52,10 @@ public class PriceFragment extends BaseFragment<SsskuPresenter, FragmentSsskuPri
View.OnFocusChangeListener mOnFocusChangeListener = (view, b) -> { View.OnFocusChangeListener mOnFocusChangeListener = (view, b) -> {
if (view instanceof EditText) { if (view instanceof EditText) {
EditText editText = (EditText) view; EditText editText = (EditText) view;
if (b && editText.getText().toString().equals("0.0")) { if (b && editText.getText().toString().equals("0.00")) {
editText.setText(""); editText.setText("");
} else if (!b && editText.getText().length() == 0) { } else if (!b && editText.getText().length() == 0) {
editText.setText("0.0"); editText.setText("0.00");
} }
} }
}; };
......
...@@ -52,10 +52,10 @@ public class VipFragment extends BaseFragment<SsskuPresenter, FragmentSsskuVipBi ...@@ -52,10 +52,10 @@ public class VipFragment extends BaseFragment<SsskuPresenter, FragmentSsskuVipBi
View.OnFocusChangeListener mOnFocusChangeListener = (view, b) -> { View.OnFocusChangeListener mOnFocusChangeListener = (view, b) -> {
if (view instanceof EditText) { if (view instanceof EditText) {
EditText editText = (EditText) view; EditText editText = (EditText) view;
if (b && editText.getText().toString().equals("0.0")) { if (b && editText.getText().toString().equals("0.00")) {
editText.setText(""); editText.setText("");
} else if (!b && editText.getText().length() == 0) { } else if (!b && editText.getText().length() == 0) {
editText.setText("0.0"); editText.setText("0.00");
} }
} }
}; };
......
package com.xingdata.zzdpos.ui.store; package com.xingdata.zzdpos.ui.store;
import android.animation.Keyframe;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import com.blankj.utilcode.constant.PermissionConstants; import com.blankj.utilcode.constant.PermissionConstants;
...@@ -118,8 +122,49 @@ public class StoreActivity extends BaseActivity<StorePresenter, ActivityStoreBin ...@@ -118,8 +122,49 @@ public class StoreActivity extends BaseActivity<StorePresenter, ActivityStoreBin
mViewBinding.setCartCount(saleorder.getOrderCnt()); mViewBinding.setCartCount(saleorder.getOrderCnt());
mViewBinding.setOrderPayAmt(saleorder.getOrderPayAmt()); mViewBinding.setOrderPayAmt(saleorder.getOrderPayAmt());
mViewBinding.setMsDisAmt(saleorder.getMsDisAmt()); mViewBinding.setMsDisAmt(saleorder.getMsDisAmt());
if (mCartDialog.isShowing) mCartDialog.loadSaleorder(saleorder); if (mCartDialog.isShowing) mCartDialog.loadSaleorder(saleorder);
this.startShakeByPropertyAnim(mViewBinding.ivCart, 0.75f, 1f, 0.30f, 500L);
}
private void startShakeByPropertyAnim(View view, float scaleSmall, float scaleLarge, float shakeDegrees, long duration) {
if (view == null) {
return;
}
//先变小后变大
PropertyValuesHolder scaleXValuesHolder = PropertyValuesHolder.ofKeyframe(View.SCALE_X,
Keyframe.ofFloat(0f, 1.0f),
Keyframe.ofFloat(0.25f, scaleSmall),
Keyframe.ofFloat(0.5f, scaleLarge),
Keyframe.ofFloat(0.75f, scaleLarge),
Keyframe.ofFloat(1.0f, 1.0f)
);
PropertyValuesHolder scaleYValuesHolder = PropertyValuesHolder.ofKeyframe(View.SCALE_Y,
Keyframe.ofFloat(0f, 1.0f),
Keyframe.ofFloat(0.25f, scaleSmall),
Keyframe.ofFloat(0.5f, scaleLarge),
Keyframe.ofFloat(0.75f, scaleLarge),
Keyframe.ofFloat(1.0f, 1.0f)
);
//先往左再往右
PropertyValuesHolder rotateValuesHolder = PropertyValuesHolder.ofKeyframe(View.ROTATION,
Keyframe.ofFloat(0f, 0f),
Keyframe.ofFloat(0.1f, -shakeDegrees),
Keyframe.ofFloat(0.2f, shakeDegrees),
Keyframe.ofFloat(0.3f, -shakeDegrees),
Keyframe.ofFloat(0.4f, shakeDegrees),
Keyframe.ofFloat(0.5f, -shakeDegrees),
Keyframe.ofFloat(0.6f, shakeDegrees),
Keyframe.ofFloat(0.7f, -shakeDegrees),
Keyframe.ofFloat(0.8f, shakeDegrees),
Keyframe.ofFloat(0.9f, -shakeDegrees),
Keyframe.ofFloat(1.0f, 0f)
);
ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(view, scaleXValuesHolder, scaleYValuesHolder, rotateValuesHolder);
objectAnimator.setDuration(duration);
objectAnimator.start();
} }
@Override @Override
...@@ -173,7 +218,11 @@ public class StoreActivity extends BaseActivity<StorePresenter, ActivityStoreBin ...@@ -173,7 +218,11 @@ public class StoreActivity extends BaseActivity<StorePresenter, ActivityStoreBin
public void resetSearchBar() { public void resetSearchBar() {
mViewBinding.etSearch.setText(""); mViewBinding.etSearch.setText("");
mViewBinding.clTitle.requestFocus(); mViewBinding.clTitle.requestFocus();
mViewBinding.clTitle.requestFocusFromTouch(); }
@Override
public void resetScanner() {
mScanFragment.resetScanner();
} }
} }
...@@ -111,6 +111,11 @@ interface StoreContract { ...@@ -111,6 +111,11 @@ interface StoreContract {
* 重置搜索栏 * 重置搜索栏
*/ */
void resetSearchBar(); void resetSearchBar();
/**
* 重置扫描器
*/
void resetScanner();
} }
abstract class Presenter extends BasePresenter<View> { abstract class Presenter extends BasePresenter<View> {
...@@ -142,9 +147,18 @@ interface StoreContract { ...@@ -142,9 +147,18 @@ interface StoreContract {
/** /**
* 商店页面 - 点击搜索 * 商店页面 - 点击搜索
*
* @param keyword 关键字
*/ */
public abstract void searchSku(String keyword); public abstract void searchSku(String keyword);
/**
* 扫描页面 - 扫描完成
*
* @param keyword 关键字
*/
public abstract void scanComplete(String keyword);
/** /**
* 搜索页面 - 加载更多搜索结果 * 搜索页面 - 加载更多搜索结果
*/ */
......
package com.xingdata.zzdpos.ui.store; package com.xingdata.zzdpos.ui.store;
import com.xingdata.zzdpos.base.BaseSku; import com.xingdata.zzdpos.base.BaseSku;
import com.xingdata.zzdpos.db.DB;
import com.xingdata.zzdpos.db.DBFactory; import com.xingdata.zzdpos.db.DBFactory;
import com.xingdata.zzdpos.model.Ms; import com.xingdata.zzdpos.model.Ms;
import com.xingdata.zzdpos.model.Saledetail; import com.xingdata.zzdpos.model.Saledetail;
import com.xingdata.zzdpos.model.Saleorder; import com.xingdata.zzdpos.model.Saleorder;
import com.xingdata.zzdpos.model.Sskugrp; import com.xingdata.zzdpos.model.Sskugrp;
import com.xingdata.zzdpos.model.Sssku;
import com.xingdata.zzdpos.model.Ussku;
import com.xingdata.zzdpos.model.Vip; import com.xingdata.zzdpos.model.Vip;
import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.util.StringUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -105,6 +110,11 @@ public class StorePresenter extends StoreContract.Presenter { ...@@ -105,6 +110,11 @@ public class StorePresenter extends StoreContract.Presenter {
this.getSearchSku(); this.getSearchSku();
} }
@Override
public void scanComplete(String keyword) {
this.getProductByBarcode(keyword);
}
@Override @Override
public void loadMoreSearchResult() { public void loadMoreSearchResult() {
this.mSearchPageNum++; this.mSearchPageNum++;
...@@ -321,4 +331,34 @@ public class StorePresenter extends StoreContract.Presenter { ...@@ -321,4 +331,34 @@ public class StorePresenter extends StoreContract.Presenter {
} }
/**
* 根据条形码获取商品
*
* @param barcode 条形码
*/
private void getProductByBarcode(String barcode) {
mView.showLoadingDialog();
List<Sssku> ssskus = DBFactory.getList(DB.getInstance().get(MainPresenter.class).where
(Sssku.class)
.equalTo("spuBarcode", StringUtil.strToLong(barcode))
.equalTo("skuStatus", 0)
.findAll());
List<Ussku> usskus = DBFactory.getList(DB.getInstance().get(MainPresenter.class).where
(Ussku.class)
.equalTo("spuBarcode", StringUtil.strToLong(barcode))
.equalTo("skuStatus", 0)
.findAll());
if (ssskus.size() + usskus.size() > 1) {
mView.showSearchFragment();
this.searchSku(barcode);
} else if (ssskus.size() == 1 && usskus.size() == 0) {
this.clickAddSku(ssskus.get(0), 1);
} else if (ssskus.size() == 0 && usskus.size() == 1) {
this.clickAddSku(usskus.get(0), 1);
} else {
mView.resetScanner();
}
mView.dismissLoadingDialog();
}
} }
...@@ -2,16 +2,8 @@ package com.xingdata.zzdpos.ui.store.fragment; ...@@ -2,16 +2,8 @@ package com.xingdata.zzdpos.ui.store.fragment;
import android.content.Context; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Handler; import android.os.Handler;
import android.util.AttributeSet;
import android.util.TypedValue;
import com.blankj.utilcode.util.ToastUtils;
import com.google.zxing.Result;
import com.xingdata.zzdpos.R; import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseFragment; import com.xingdata.zzdpos.base.BaseFragment;
import com.xingdata.zzdpos.databinding.FragmentStoreScanBinding; import com.xingdata.zzdpos.databinding.FragmentStoreScanBinding;
...@@ -21,9 +13,10 @@ import me.dm7.barcodescanner.core.IViewFinder; ...@@ -21,9 +13,10 @@ import me.dm7.barcodescanner.core.IViewFinder;
import me.dm7.barcodescanner.core.ViewFinderView; import me.dm7.barcodescanner.core.ViewFinderView;
import me.dm7.barcodescanner.zxing.ZXingScannerView; import me.dm7.barcodescanner.zxing.ZXingScannerView;
public class ScanFragment extends BaseFragment<StorePresenter, FragmentStoreScanBinding> implements ZXingScannerView.ResultHandler { public class ScanFragment extends BaseFragment<StorePresenter, FragmentStoreScanBinding> {
private ZXingScannerView mScannerView; private ZXingScannerView mScannerView;
private ZXingScannerView.ResultHandler mResultHandler;
@Override @Override
public int getLayoutId() { public int getLayoutId() {
...@@ -38,33 +31,19 @@ public class ScanFragment extends BaseFragment<StorePresenter, FragmentStoreScan ...@@ -38,33 +31,19 @@ public class ScanFragment extends BaseFragment<StorePresenter, FragmentStoreScan
return new CustomViewFinderView(context); return new CustomViewFinderView(context);
} }
}; };
mViewBinding.contentFrame.addView(mScannerView);
}
@Override
public void handleResult(Result result) {
ToastUtils.showShort("Contents = " + result.getText() + ", Format = " + result.getBarcodeFormat().toString()); mResultHandler = result -> {
mPresenter.scanComplete(result.getText());
resetScanner();
};
// Note: mScannerView.setResultHandler(mResultHandler);
// * Wait 2 seconds to resume the preview. mViewBinding.contentFrame.addView(mScannerView);
// * On older devices continuously stopping and resuming camera preview can result in freezing the app.
// * I don't know why this is the case but I don't have the time to figure out.
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mScannerView.resumeCameraPreview(ScanFragment.this);
}
}, 2000);
} }
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
mScannerView.setResultHandler(this);
mScannerView.startCamera(); mScannerView.startCamera();
} }
...@@ -74,48 +53,26 @@ public class ScanFragment extends BaseFragment<StorePresenter, FragmentStoreScan ...@@ -74,48 +53,26 @@ public class ScanFragment extends BaseFragment<StorePresenter, FragmentStoreScan
mScannerView.stopCamera(); mScannerView.stopCamera();
} }
/**
* 重置扫描器
*/
public void resetScanner() {
new Handler().postDelayed(() -> mScannerView.resumeCameraPreview(mResultHandler), 500);
}
private static class CustomViewFinderView extends ViewFinderView { private static class CustomViewFinderView extends ViewFinderView {
public static final String TRADE_MARK_TEXT = "ZXing";
public static final int TRADE_MARK_TEXT_SIZE_SP = 40;
public final Paint PAINT = new Paint();
public CustomViewFinderView(Context context) { public CustomViewFinderView(Context context) {
super(context); super(context);
init(); int themeColor = getResources().getColor(R.color.blue_mawu);
}
public CustomViewFinderView(Context context, AttributeSet attrs) { this.setBorderColor(themeColor);
super(context, attrs); this.setBorderStrokeWidth(getResources().getDimensionPixelOffset(R.dimen.all_spacing));
init();
}
private void init() { this.setLaserColor(themeColor);
PAINT.setColor(Color.WHITE); this.setLaserEnabled(true);
PAINT.setAntiAlias(true);
float textPixelSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
TRADE_MARK_TEXT_SIZE_SP, getResources().getDisplayMetrics());
PAINT.setTextSize(textPixelSize);
setSquareViewFinder(true);
} }
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
drawTradeMark(canvas);
}
private void drawTradeMark(Canvas canvas) {
Rect framingRect = getFramingRect();
float tradeMarkTop;
float tradeMarkLeft;
if (framingRect != null) {
tradeMarkTop = framingRect.bottom + PAINT.getTextSize() + 10;
tradeMarkLeft = framingRect.left;
} else {
tradeMarkTop = 10;
tradeMarkLeft = canvas.getHeight() - PAINT.getTextSize() - 10;
}
canvas.drawText(TRADE_MARK_TEXT, tradeMarkLeft, tradeMarkTop, PAINT);
}
} }
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10000dp" /> <corners android:radius="@dimen/all_shape_radius" />
<solid android:color="@color/gray_kongming" /> <solid android:color="@color/gray_kongming" />
</shape> </shape>
\ No newline at end of file
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/settle_btn_radius" /> <corners android:radius="@dimen/settle_btn_radius" />
<solid android:color="@color/gray_huanggai" /> <solid android:color="@color/gray_kongming" />
</shape> </shape>
\ No newline at end of file
...@@ -10,13 +10,6 @@ ...@@ -10,13 +10,6 @@
android:id="@+id/content_frame" android:id="@+id/content_frame"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="啊大家谁都阿斯达" />
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>
</layout> </layout>
\ No newline at end of file
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center" android:gravity="center"
android:textColor="@color/black_baozheng" android:textColor="@color/black_baozheng"
android:textSize="@{selected?@dimen/all_sub_title_size:@dimen/all_text_size}" /> android:textSize="@dimen/all_text_size" />
</FrameLayout> </FrameLayout>
......
...@@ -413,8 +413,9 @@ ...@@ -413,8 +413,9 @@
<item name="android:drawablePadding">@dimen/all_spacing</item> <item name="android:drawablePadding">@dimen/all_spacing</item>
<item name="android:paddingStart">@dimen/all_padding</item> <item name="android:paddingStart">@dimen/all_padding</item>
<item name="android:maxLines">1</item> <item name="android:maxLines">1</item>
<item name="android:layout_height">30dp</item>
<item name="android:maxLength">20</item> <item name="android:maxLength">20</item>
<item name="android:background">@drawable/shape_gray_r1</item> <item name="android:background">@drawable/shape_gray_r2</item>
<item name="android:imeOptions">actionSearch</item> <item name="android:imeOptions">actionSearch</item>
</style> </style>
...@@ -422,7 +423,7 @@ ...@@ -422,7 +423,7 @@
<item name="android:drawablePadding">@dimen/all_spacing</item> <item name="android:drawablePadding">@dimen/all_spacing</item>
<item name="android:maxLines">1</item> <item name="android:maxLines">1</item>
<item name="android:maxLength">20</item> <item name="android:maxLength">20</item>
<item name="android:background">@drawable/shape_gray_r1</item> <item name="android:background">@drawable/shape_gray_r2</item>
<item name="android:padding">@dimen/all_spacing</item> <item name="android:padding">@dimen/all_spacing</item>
<item name="android:imeOptions">actionSearch</item> <item name="android:imeOptions">actionSearch</item>
</style> </style>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment