Java Android Studio-WindowManager中的画布交互
我正在开发一个Android应用程序,它有一个覆盖视图,用户可以从任何地方访问。 我从以下问题中提取了代码: 简单地说,一个类“HUD”调用一个子类ViewGroup“HUDView”,包含所有必要的元素 现在我想在这个视图组中添加一个SeekBar,在进度发生变化时,每次都会绘制一个画布:例如SeekBar progress=1,绘制一个角度为10°的圆,progress=2,重新绘制角度为20°的圆,等等。。。 圆圈和搜索杆必须从任何地方覆盖实际屏幕 我已经成功地将Canvas(在ViewGroup的onDraw方法中创建)和seekBar(在HUD类的onCreate方法中创建,也与他的侦听器一起放置)。 在“onProgressChanged”方法中,我想重新绘制圆,但这似乎不起作用 下面是侦听器代码:Java Android Studio-WindowManager中的画布交互,java,android,android-studio,canvas,seekbar,Java,Android,Android Studio,Canvas,Seekbar,我正在开发一个Android应用程序,它有一个覆盖视图,用户可以从任何地方访问。 我从以下问题中提取了代码: 简单地说,一个类“HUD”调用一个子类ViewGroup“HUDView”,包含所有必要的元素 现在我想在这个视图组中添加一个SeekBar,在进度发生变化时,每次都会绘制一个画布:例如SeekBar progress=1,绘制一个角度为10°的圆,progress=2,重新绘制角度为20°的圆,等等。。。 圆圈和搜索杆必须从任何地方覆盖实际屏幕 我已经成功地将Canvas(在View
// SeekBar Change Listener
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
mView = new HUDView(getApplicationContext());
progress = progresValue;
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.CENTER | Gravity.TOP;
params.setTitle("Load Average");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//Toast.makeText(getApplicationContext(), "Started tracking seekbar", Toast.LENGTH_SHORT).show();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//textView.setText("Covered: " + progress + "/" + seekBar.getMax());
//Toast.makeText(getApplicationContext(), "Stopped tracking seekbar", Toast.LENGTH_SHORT).show();
}
});
以下是HUDView的onDraw方法:
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
final RectF oval = new RectF();
oval.set(30, 30, 450, 450);
Bitmap bg = Bitmap.createBitmap(480, 480, Bitmap.Config.ARGB_8888);
canvas.drawArc(oval, 90, progress*10 , true, paint);
}