本文介绍了如何用移动线指示器显示二维码扫描进度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在我的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
}
这篇关于如何用移动线指示器显示二维码扫描进度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!