请参阅附件中的图片。
我想在汽车周围的蓝色力场边缘画一个渐变,如下图所示。
问题是渐变可能出现在蓝色方块的任何边缘(取决于用户输入),并且必须朝向中心。此外,边缘上的小部分也可能只有梯度。
我尝试了几种不同的方法,但却找不到合适的解决方案 目前我正在使用xml中定义的渐变,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:type="radial" android:gradientRadius="75"
android:startColor="@color/warningColor"
android:endColor="#00d8345a"/>
</shape>
然后在java中使用它并使用SurfaceView
画布上的位图绘制它:
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.circle_gradient, null);
mGradientBmp = Bitmap.createBitmap(250, 250, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(mGradientBmp);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
当前通过触摸输入接收应用程序的输入,用户可以触摸屏幕上的任何位置。我在event.getAction == MotionEvent.ACTION_MOVE
时保留了所有触摸点的列表,并在每个位置绘制上面的位图,如下所示:
public void drawScreen(Canvas canvas) {
long c = System.currentTimeMillis();
canvas.drawColor(Color.WHITE);
canvas.setMatrix(mPerspectiveMatrix);
canvas.drawBitmap(mRoadBmp, 0,0, null);
canvas.drawBitmap(mForceFieldBmp, null, mForceFieldRect, null);
synchronized (mTouchPointsList) {
for (PointF p : mTouchPointsList) {
canvas.drawBitmap(mGradientBmp, p.x, p.y, null);
}
}
}
我有几个问题。
您如何建议绘制渐变(仅在蓝色力场的边缘附近)并保持渐变朝向中心?
如何有效地跟踪触摸点?我目前正在使用CopyOnWriteArrayList
因为输入和绘图在不同的线程上。
我当前的解决方案几乎可以工作(除了因为列表效率低,所以它会在一段时间后变慢)但绘图需要限制在内部蓝色力场。
如何处理此问题的任何建议将不胜感激。
由于