我有一個要求,我必須放大和縮小圖像捏。請任何人都可以建議我捏圖像縮放功能。捏縮放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