2015-03-03 2 views
1

Я пытаюсь реализовать лупу в приложении для Android. На прикасаясь растрового изображения должно быть увеличено до некоторой пропорции и показал aside.I'm не получить точную растровую область, где я прикоснулся на bitmap.Can кого дают мне solution.This моего кодКак увеличить точку касания растрового изображения в android?

Bitmap bitmap = new BitmapShader(modelBitmap, TileMode.CLAMP, TileMode.CLAMP); 
Paint paint = new Paint(); 
matrix1.postScale(2f, 2f, mouseDownX, mouseDownY); 
bitmap.setLocalMatrix(matrix1); 
paint.setShader(bitmap); 
canvas.drawCircle(60,230, (int) (width * 0.10), paint); 

Здесь mouseDownX и mouseDownY - сенсорные координаты. Я не получаю точную область растрового изображения, где я касался.

+0

Пожалуйста, пост код, который вы уже пробовали и объяснить, что это не работает. Если вы хотите, чтобы разработчики просто записывали этот код для вас, это, вероятно, будет стоить вам денег, и это, вероятно, не подходит для этого. –

+0

Скажите, что я делаю неправильно? – user3305353

ответ

0
BitmapShader bitmap = new BitmapShader(modelBitmap, TileMode.CLAMP, 
TileMode.CLAMP); 
Paint paint = new Paint(); 
matrix1.postScale(2f, 2f, mouseDownX, mouseDownY); 
bitmap.setLocalMatrix(matrix1); 
paint.setShader(bitmap); 
canvas.drawCircle(mouseDownX, mouseDownY, (int) (width * 0.10), paint); 

см How to magnify/zoom part of image

0

Создайте свой собственный класс, который будет распространяться ImageView класс и переопределить onTouchEvent и onTouchEvent методы. Получите выбранное местоположение и нарисуйте затронутую секцию на холсте в любой форме, какой хотите.

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapShader; 
import android.graphics.Canvas; 
import android.graphics.Matrix; 
import android.graphics.Paint; 
import android.graphics.PointF; 
import android.graphics.Shader; 
import android.support.v7.widget.AppCompatButton; 
import android.support.v7.widget.AppCompatImageView; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.ImageView; 


public class CodesforMagnifierImageView extends AppCompatImageView 
{ 

    private PointF zoomPosition; 
    private boolean zooming = false; 
    private Matrix matrix; 
    private Paint paint; 
    private Bitmap bitmap; 
    private BitmapShader shader; 
    private int sizeOfMagnifier = 200; 

    public CodesforMagnifierImageView(Context context) 
    { 
     super(context); 
     init(); 
    } 

    public CodesforMagnifierImageView(Context context, AttributeSet attrs, int defStyleAttr) 
    { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    public CodesforMagnifierImageView(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     init(); 
    } 

    private void init() 
    { 
     zoomPosition = new PointF(0, 0); 
     matrix = new Matrix(); 
     paint = new Paint(); 

    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     int action = event.getAction(); 

     zoomPosition.x = event.getX(); 
     zoomPosition.y = event.getY(); 

     switch (action) 
     { 
      case MotionEvent.ACTION_DOWN: 
      case MotionEvent.ACTION_MOVE: 
       zooming = true; 
       this.invalidate(); 
       break; 
      case MotionEvent.ACTION_UP: 
      case MotionEvent.ACTION_CANCEL: 
       zooming = false; 
       this.invalidate(); 
       break; 

      default: 
       break; 
     } 

     return true; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     super.onDraw(canvas); 
     if (!zooming) 
     { 
      buildDrawingCache(); 
     } 
     else 
     { 

      bitmap = getDrawingCache(); 
      shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 

      paint = new Paint(); 
      paint.setShader(shader); 
      matrix.reset(); 
      matrix.postScale(2f, 2f, zoomPosition.x, zoomPosition.y); 
      paint.getShader().setLocalMatrix(matrix); 
      canvas.drawCircle(zoomPosition.x, zoomPosition.y, sizeOfMagnifier, paint); 
     } 
    } 


} 

Используйте его следующим образом:

<com.utilities.CodesforMagnifierImageView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/image" /> 
Смежные вопросы