在做android随手势放大bitmap是出现oom异常。请问大家如何快速放大bitmap而又能避免oom异常喔、 谢谢啦
解决方案 »
- 关于button样式的疑问,求解
- 请教个GridView加载问题
- 长按EditText后弹出的编辑文本问题
- RadioGroup 里面的选项没显示,为什么??
- 让Android的背景图片显示随控件拉伸,怎么弄?
- 请问Android出现这个问题怎么解决,先谢过了!!呵呵
- 动态库如何调用系统的静态库?
- android与WebClient的一个问题
- [急]android 播放rtmp视频流问题
- 大牛帮忙看看这个JAVA OutPutStream的问题啊
- android light sensor和temperature sensor得到的数据怎样传递到画布上(2个矩形框显示)
- 更新了eclipse的android插件,在运行以前工程的时候报错,大家帮我看看是怎么回事?
2.通过jni,native code 增加限制的process内存大小(只是听说过,我并没有实践过)
3.在layout固定大小的前提下,写个class extends View的物件,然后复写onDraw(Canvas canvas),在此方法内作矩阵的变换绘出图形内容,并不需要一直去create bitmap,减少内存消耗。
我想实现的效果就是 想pdf阅读器那样的效果:手势能快速的放大、缩小图片,手指松开后,才重新加载图片不知道这个效果是如何实现的、 求解 谢谢啊
这样会方便点
稍晚贴源码
2.多点触屏的处理。
3.注意Bitmap的回收。也期待源码的出现。
改framework下面的 inputmanager 里面对触点的index只封装了0 1 两个
你再把2 3 什么封装然后上报就好了
int action = event.getAction() & MotionEvent.ACTION_MASK;
switch (action) {
case MotionEvent.ACTION_DOWN:
System.out.println("ACTION_DOWN");
matrix.set(image.getImageMatrix());
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
System.out.println("ACTION_POINTER_DOWN");
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
setMidPoint(mid, image);
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
System.out.println("ACTION_UP");
break;
case MotionEvent.ACTION_POINTER_UP:
System.out.println("ACTION_POINTER_UP");
mode = NONE; break; case MotionEvent.ACTION_MOVE:
// System.out.println("ACTION_MOVE"); if (mode == DRAG) {
float X = event.getX();
float Y = event.getY();
if (X >= leftX + zoomInGesture && X <= rightX + zoomInGesture
&& Y >= topY + zoomInGesture
&& Y <= bottomY + zoomInGesture) {
System.out.println("DRAG");
matrix.set(savedMatrix); matrix.postTranslate(event.getX() - start.x, event.getY()
- start.y);
} } else if (mode == ZOOM) { float newDist = spacing(event);
if (newDist > 10f) {
float X1 = event.getX(0);
float Y1 = event.getY(0);
float X2 = event.getX(1);
float Y2 = event.getY(1);
if (X1 >= leftX + zoomInGesture
&& X1 <= rightX + zoomInGesture
&& Y1 >= topY + zoomInGesture
&& Y1 <= bottomY + zoomInGesture
&& X2 >= leftX + zoomInGesture
&& X2 <= rightX + zoomInGesture
&& Y2 >= topY + zoomInGesture
&& Y2 <= bottomY + zoomInGesture) {
System.out.println("ZOOM");
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
}
break; }
image.setImageMatrix(matrix);
return true;
} private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
} // private void setMidPoint(PointF point, MotionEvent event) {
// float x = event.getX(0) + event.getX(1);
// float y = event.getY(0) + event.getY(1);
// point.set(x / 2, y / 2);
// }
private void setMidPoint(PointF point, ImageView view) {
int left = view.getLeft();
int top = view.getTop();
float x = left + left + view.getWidth();
float y = top + top + view.getHeight();
point.set(x / 2, y / 2);
} private void getImageRange(ImageView view) {
leftX = view.getLeft();
rightX = view.getRight();
topY = view.getTop();
bottomY = view.getBottom();
}