本文介绍了如何用移动线指示器显示二维码扫描进度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的Android应用程序中打开摄像头时显示一条线在屏幕上移动。类似于条形码扫描仪应用程序中移动的线。就像图中所示的白线。这条线可以从上到下、从下到上连续移动。

推荐答案

为此,您需要创建自定义视图并覆盖onDraw方法,如下所示:

public class MyScanningView extends View {
private Paint paint = new Paint();
private int mPosY = 0;
private boolean runAnimation = true;
private boolean showLine = true;
private Handler handler;
private Runnable refreshRunnable;
private boolean isGoingDown = true;
private int mHeight;
private int DELAY = 0;
public MyScanningView(Context context) {
    super(context);
    init();
}

public MyScanningView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public MyScanningView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

private void init() {
    paint.setColor(Color.WHITE);
    paint.setStrokeWidth(5.0f);//make sure add stroke width otherwise line not display
    handler = new Handler();
    refreshRunnable = new Runnable() {
                        @Override
                        public void run() {
                          refreshView();
                        }
                    }
}

@Override
public void onDraw(Canvas canvas) {
    mHeight = canvas.getHeight();
    if (showLine) {
      canvas.drawLine(0, mPosY, canvas.getWidth(), mPosY, paint);
    }
    if (runAnimation) {
      handler.postDelayed(refreshRunnable, DELAY);
    }
}

public void startAnimation() {
    runAnimation = true;
    showLine = true;
    this.invalidate();
}

public void stopAnimation() {
    runAnimation = false;
    showLine = false;
    reset();
    this.invalidate();
}

private void reset() {
  mPosY = 0;
  isGoingDown = true;
}

private void refreshView() {
  //Update new position of the line
  if (isGoingDown) {
    mPosY += 5;
    if (mPosY > mHeight) {
      //We invert the direction of the animation
      mPosY = mHeight;
      isGoingDown = false;
  } else {
    mPosY -= 5;
    if (mPosY < 0) {
      //We invert the direction of the animation
      mPosY = 0;
      isGoingDown = true;
    }
this.invalidate();
}

}

然后只需将此视图添加到您的active_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/main_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
  <com.//wherever_is_your_view.MyScanningView
    android:id="@+id/scanningView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</LinearLayout>

和在您的主要活动中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MyScanningView scanningView = (MyScanningView) findViewById(R.id.scanningView);
    scanningView.startAnimation(); //To start Animation
}

这篇关于如何用移动线指示器显示二维码扫描进度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 04:24