我有一个要求,我必须放大和缩小图像捏。请任何人都可以建议我捏图像缩放功能。捏缩放android的imageview?
4
A
回答
7
试试这个
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
public class MyImageView extends View {
private static final int INVALID_POINTER_ID = -1;
private Drawable mImage;
private float mPosX;
private float mPosY;
private float mLastTouchX;
private float mLastTouchY;
private int mActivePointerId = INVALID_POINTER_ID;
private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;
public MyImageView(Context context) {
this(context, null, 0);
mImage=act.getResources().getDrawable(context.getResources().getIdentifier("imagename", "drawable", "packagename"));
mImage.setBounds(0, 0, mImage.getIntrinsicWidth(), mImage.getIntrinsicHeight());
}
public MyImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
// Let the ScaleGestureDetector inspect all events.
mScaleDetector.onTouchEvent(ev);
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
final float x = ev.getX();
final float y = ev.getY();
mLastTouchX = x;
mLastTouchY = y;
mActivePointerId = ev.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE: {
final int pointerIndex = ev.findPointerIndex(mActivePointerId);
final float x = ev.getX(pointerIndex);
final float y = ev.getY(pointerIndex);
// Only move if the ScaleGestureDetector isn't processing a gesture.
if (!mScaleDetector.isInProgress()) {
final float dx = x - mLastTouchX;
final float dy = y - mLastTouchY;
mPosX += dx;
mPosY += dy;
invalidate();
}
mLastTouchX = x;
mLastTouchY = y;
break;
}
case MotionEvent.ACTION_UP: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_CANCEL: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = ev.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
// This was our active pointer going up. Choose a new
// active pointer and adjust accordingly.
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
mLastTouchX = ev.getX(newPointerIndex);
mLastTouchY = ev.getY(newPointerIndex);
mActivePointerId = ev.getPointerId(newPointerIndex);
}
break;
}
}
return true;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
Log.d("DEBUG", "X: "+mPosX+" Y: "+mPosY);
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor);
mImage.draw(canvas);
canvas.restore();
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
// Don't let the object get too small or too large.
mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 10.0f));
invalidate();
return true;
}
}
}
13
简单,你可以做以下获得双指缩放,
将您的图像资产的文件夹,并提供验证码,
String imageUrl = "file:///android_asset/abc.png";
WebView wv = (WebView) findViewById(R.id.yourwebview);
wv.getSettings().setBuiltInZoomControls(true);
wv.loadUrl(imageUrl);
+0
错误消息显示'找不到请求的文件'。在我的项目目录中有一个名为“资产”的文件夹,我在其中复制了我的图像。 –
+0
谢谢,现在它工作。我在'imageUrl =“file:///assets/abc.png”;'中误认了。你能告诉我为什么它是'android_asset'而在项目目录中显示'assets'? –
+0
添加一个WebView只有一个缩放?这值得么? – param
相关问题
- 1. 在Android中捏缩放ImageView
- 2. 捏和缩放imageview
- 3. 捏缩放ListView Android
- 4. 捏缩放android 2.1
- 5. 捏缩放textview android
- 6. 捏缩放ImageView时的奇怪行为
- 7. Android的GridView捏缩放
- 8. Android - ImageView缩放
- 9. Android:捏缩放ImageView与附加的子视图
- 10. 捏缩放和2个手指旋转Android中的ImageView
- 11. 捏缩放手势android
- 12. Android平滑捏缩放?
- 13. JQueryMobile宏达Android捏缩放
- 14. 捏缩放,平移mapview android
- 15. Android捏缩放文本
- 16. Android捏/缩放和glfrustum
- 17. Android捏缩放在Javascript中
- 18. 如何在Android中捏缩放和滑动多个imageview?
- 19. Xamain Android ImageView缩放
- 20. NSCollectionView捏缩放
- 21. iphone捏缩放
- 22. 捏缩放,TextView的
- 23. 的Android ImageView的缩放confict
- 24. 捏和放大iphone imageview
- 25. Android的webview捏缩放问题
- 26. 捏缩放相机
- 27. 捏与CSS3缩放
- 28. Xamarin.forms捏和缩放
- 29. 捏与Hammer.js缩放
- 30. 捏缩放与GLSurfaceView
[这里](HTTP ?://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-6-implementing-the-pinch-zoom-gesture/1847标签= mantle_skin;内容) 你走! – iDroid