【发布时间】:2019-10-10 17:03:57
【问题描述】:
我一直在使用位图在视图中渲染小的彩色圆圈。现在我想在点击时在这些圆圈周围显示自定义涟漪动画。
在通过 StackOverflow 的答案搜索了一段时间后,主要建议将这些位图包装在 VIEW 中,并使用 Android 的动画框架将动画应用于这些视图。
但问题是,我已经通过
使用该视图的画布在视图中绘制这些位图canvas.drawBitmap()
功能。我只想在单击时显示以这些位图为中心的涟漪。我的问题是,无论如何我可以为位图提供波纹或任何动画而不将它们包装为视图?
protected void fill(ILineDataSet set, boolean drawCircleHole,
boolean drawTransparentCircleHole, int selectedEntryIndex) {
int colorCount = set.getCircleColorCount();
int holeColorCount = set.getCircleHoleColorCount();
circleRadius = set.getCircleRadius();
circleHoleRadius = set.getCircleHoleRadius();
for (int i = 0; i < (colorCount > holeColorCount ? colorCount: holeColorCount); i++) {
Bitmap.Config conf = Bitmap.Config.ARGB_4444;
Bitmap circleBitmap = Bitmap.createBitmap((int) (circleRadius * 2.1),
(int) (circleRadius * 2.1), conf);
Canvas canvas = new Canvas(circleBitmap);
circleBitmaps[i] = circleBitmap;
//fill colors in the values' circles
mRenderPaint.setColor(set.getCircleColor(i < colorCount ? i : 0));
mCirclePaintInner.setColor(set.getCircleHoleColor(i < holeColorCount ? i : 0));
if (drawTransparentCircleHole) {
// Begin path for circle with hole
mCirclePathBuffer.reset();
mCirclePathBuffer.addCircle(
circleRadius,
circleRadius,
circleRadius,
Path.Direction.CW);
// Cut hole in path
mCirclePathBuffer.addCircle(
circleRadius,
circleRadius,
circleHoleRadius,
Path.Direction.CCW);
// Fill in-between
canvas.drawPath(mCirclePathBuffer, mRenderPaint);
} else {
canvas.drawCircle(
circleRadius,
circleRadius,
circleRadius,
mRenderPaint);
if (drawCircleHole) {
canvas.drawCircle(
circleRadius,
circleRadius,
circleHoleRadius,
mCirclePaintInner);
}
}
if (i == selectedEntryIndex) {
circleBitmaps[i] = getScaledUpBitmap(circleBitmaps[i]);
}
}
}
private Bitmap getScaledUpBitmap(Bitmap bm) {
//scale bitmap as twice its size
int width = bm.getWidth();
int height = bm.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(1.5f, 1.5f);
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
bm.recycle();
return resizedBitmap;
}
【问题讨论】:
-
你有位置和尺寸的圆圈列表吗?如果是,请分享您的代码以检测视图和列表条目类上的触摸事件。
-
@Ferran 是的,我管理位图数组列表。我已经编辑了这个问题。现在,我将选择作为参数的圆的索引发送给函数 fill() 并在其索引匹配时缩放相同的位图。我还想在点击时在该圆形位图周围显示波纹并在位图缩放完成后触发波纹动画。
标签: java android android-layout android-animation android-bitmap