매트릭스를 사용하여 IMAGEVIEW의 드래그를 제어하는 방법

안드레스 카르데나스

드래그 확대 / 축소를 위해 앱에서 Matrix를 사용하고 있습니다. 사용자 지정 ImageView를 사용합니다.

내 문제:

드래그의 한계를 제어 할 수 없습니다 (최대 및 최소 확대가 완료되었습니다)

줌에 따라 매트릭스의 값을 찾아서 해결하려고하지만 장치에 따라 달라지기 때문에 더 좋은 방법은 아니며 0.9에서 1.7 사이에서 줌을 수동으로 제어 할 수 있습니다.

코너를 제어하는 ​​더 나은 방법이 필요합니다.

내 문제는 행렬의 값 [2]과 값 [5]에 있습니다.

도움을 주셔서 감사합니다. 감사합니다! :디

이제 코드

이를 위해 지금 사용하는 두 가지 방법이 있습니다.

이 메서드는 행렬 (값 [0] 및 값 [4])의 확대 / 축소를 확인하고 사용자 지정 매개 변수를 limitCorners (float float)로 보냅니다.

 public void checkZoom(){
    float[] values = new float[9];
    matrix.getValues(values);
    //compruebo el zoom
    float scaleX = values[Matrix.MSCALE_X];
    float scaleY = values[Matrix.MSCALE_Y];
    if(scaleX > MAX_ZOOM) {
    scaleX = MAX_ZOOM;
    } else if(scaleX < MIN_ZOOM) {
    scaleX = MIN_ZOOM;
    }

    if(scaleY > MAX_ZOOM) {
    scaleY = MAX_ZOOM;
    } else if(scaleY < MIN_ZOOM) {
    scaleY = MIN_ZOOM;
    }

    values[Matrix.MSCALE_X] = scaleX;
    values[Matrix.MSCALE_Y] = scaleY; 
    matrix.setValues(values);

  //Second part: depend zoom send values
    //a limitaBordes(float, float)
    valores = new float[9];
    matrix.getValues(valores);
    if (valores[0]<=MIN_ZOOM){
        valores[0]=MIN_ZOOM;
        valores[4]=MIN_ZOOM;
        valores[2]=0;
        valores[5]=0;
        matrix.setValues(valores);
        //imageView.setImageMatrix(matrix);
    }else if(valores[0]>0.9 && valores[0]<=1){
        limitCorners(-65, -40);
    }else if(valores[0]>1 && valores[0]<=1.1){
        limitCorners(-166, -123);
    }else if(valores[0]>1.1 && valores[0]<=1.2){
        limitCorners(-246, -201);
    }else if(valores[0]>1.2 && valores[0]<=1.3){
        limitCorners(-316, -280);
    }else if(valores[0]>1.3 && valores[0]<=1.4){
        limitCorners(-409, -359);
    }else if(valores[0]>1.4 && valores[0]<=1.5){
        limitCorners(-484, -435);
    }else if(valores[0]>1.5 && valores[0]<=1.6){
        limitCorners(-563, -521);
    }else {// (valores[0]>1.6f)
        limitCorners(-664, -600);
    }
}

>

void limitCorners(float valorX, float valorY){
    //log("determinando");
    //if(x>0)

    if(valores[2]>0){
        valores[2]=0;
        matrix.setValues(valores);
    }//if(y>0)
    if(valores[5]>0){
        valores[5]=0;
        matrix.setValues(valores);
    }//if(x<valorX)
    if(valores[2]< valorX){
        valores[2]= valorX;
        matrix.setValues(valores);
    }//if(y<valorY)
    if(valores[5]< valorY){
        valores[5]= valorY;
        matrix.setValues(valores);
    }
    imageView.setImageMatrix(matrix);
}
안드레스 카르데나스

나는 그것을 해결한다!

누군가 같은 문제가 있으면 여기에 코드를 넣었습니다.

public void checkZoom(){
    float[] values = new float[9];
    matrix.getValues(values);
    float scaleX = values[Matrix.MSCALE_X];
    if(scaleX > MAX_ZOOM) {
        setZoom(MAX_ZOOM);
    } 
    else if(scaleX < MIN_ZOOM) {
        setZoom(MIN_ZOOM);
    }
    limitCorners();
}
private void limitCorners() {
    viewWidth = this.getWidth();
    viewHeight = this.getHeight();
    float []m = new float[9];
    matrix.getValues(m);
    float transX = m[Matrix.MTRANS_X];
    float transY = m[Matrix.MTRANS_Y];
    float fixTransX = getFixTrans(transX, viewWidth, getImageWidth());
    float fixTransY = getFixTrans(transY, viewHeight, getImageHeight());
    if (fixTransX != 0 || fixTransY != 0) {
        matrix.postTranslate(fixTransX, fixTransY);
    }
    matrix.getValues(m);
    if (getImageWidth() < viewWidth) {
        m[Matrix.MTRANS_X] = (viewWidth - getImageWidth()) / 2;
    }
    if (getImageHeight() < viewHeight) {
        m[Matrix.MTRANS_Y] = (viewHeight - getImageHeight()) / 2;
    }
    matrix.setValues(m);
}

private float getFixTrans(float trans, float viewSize, float contentSize) {
    float minTrans, maxTrans;
    if (contentSize <= viewSize) {
        minTrans = 0;
        maxTrans = viewSize - contentSize;
    } else {
        minTrans = viewSize - contentSize;
        maxTrans = 0;
    }
    if (trans < minTrans)
        return -trans + minTrans;
    if (trans > maxTrans)
        return -trans + maxTrans;
    return 0;
}
/** Get the width of image (bitmapWidth*Zoom)*/
float getImageWidth(){
    float []m = new float[9];
    matrix.getValues(m);
    return m[Matrix.MSCALE_X]*bitmap.getWidth();
}
/** Get the Height of image (bitmapHeight*Zoom)*/
float getImageHeight(){
    float []m = new float[9];
    matrix.getValues(m);
    return m[Matrix.MSCALE_X]*bitmap.getHeight();
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

래퍼를 사용하여 버튼의 토글을 제어하는 방법

분류에서Dev

미소 도서관의 CLARANS 방법을 사용하여 사용자 정의 거리 매트릭스 내 데이터를 클러스터링하는 방법

분류에서Dev

R을 사용하여 ANOVA 매트릭스를 생성하는 방법

분류에서Dev

세 개의 테이블을 사용하여 MySQL의에서 SQL 문을 사용하여 매트릭스 스타일 데이터를 얻는 방법

분류에서Dev

배치를 사용하여 USB 포트의 전원을 제어하는 방법

분류에서Dev

UIPanGestureRecognizer를 사용하여 드래그 컨트롤의 경계를 설정하는 방법은 무엇입니까?

분류에서Dev

UIPanGestureRecognizer를 사용하여 드래그 컨트롤의 경계를 설정하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트를 사용하여 클릭에 HTML의 DIV를 제거하는 방법

분류에서Dev

Bokeh : 클릭하고 드래그하여 포인트 사이의 변위를 표시하는 방법

분류에서Dev

쉘 스크립트를 사용하여 여러 단어와 파일의 해당 줄을 제거하는 방법

분류에서Dev

CSS의 선형 그래디언트를 사용하여 디자인과 같은 각도를 만드는 방법

분류에서Dev

MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 방법

분류에서Dev

MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 방법

분류에서Dev

JavaScript를 사용하여 div의 이동을 제어하는 방법

분류에서Dev

그래픽 어댑터를 사용하여 임의의 "고스트"모니터 및 이상한 동작을 제거하는 방법

분류에서Dev

C #을 사용하여 USB 포트를 제어하는 방법

분류에서Dev

R에서 for 루프를 사용하여 일련의 그래프를 만드는 방법

분류에서Dev

DecoView lib를 사용하여 2 개의 무료 seriesItem으로 그래프를 만드는 방법

분류에서Dev

replaceAll을 사용하여 텍스트의 일부를 제거하는 방법

분류에서Dev

Haskell에서 setElem을 사용하여 매트릭스를 업데이트하는 방법

분류에서Dev

매트릭스 형태의 조인트 PMF가 있습니다. R을 사용하여 $ P (N> G) $를 찾는 방법은 무엇입니까?

분류에서Dev

매니페스트를 사용하여 DPI 배율 및 호환성 비활성화를 제어하는 방법

분류에서Dev

@ react-google-maps / api를 사용하여 그리기 관리자의 제어 위치를 변경하는 방법

분류에서Dev

Java를 사용하여 회색조 2D 매트릭스를 JPanel에 인쇄하는 방법

분류에서Dev

기본 클래스의 메서드를 사용하여 중첩 클래스에서 제네릭 형식을 반환하는 방법

분류에서Dev

그리드의 부트 스트랩 4에서 sticky-top 클래스를 사용하는 방법

분류에서Dev

제네릭을 사용하여 입력하는 추상 클래스에서 메서드를 재정의하는 방법은 무엇입니까?

분류에서Dev

키보드를 사용하여 "클릭 앤 드래그"를 모방하는 방법이 있습니까?

분류에서Dev

Android에서 드래그 한 ImageView의 위치를 저장하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    래퍼를 사용하여 버튼의 토글을 제어하는 방법

  2. 2

    미소 도서관의 CLARANS 방법을 사용하여 사용자 정의 거리 매트릭스 내 데이터를 클러스터링하는 방법

  3. 3

    R을 사용하여 ANOVA 매트릭스를 생성하는 방법

  4. 4

    세 개의 테이블을 사용하여 MySQL의에서 SQL 문을 사용하여 매트릭스 스타일 데이터를 얻는 방법

  5. 5

    배치를 사용하여 USB 포트의 전원을 제어하는 방법

  6. 6

    UIPanGestureRecognizer를 사용하여 드래그 컨트롤의 경계를 설정하는 방법은 무엇입니까?

  7. 7

    UIPanGestureRecognizer를 사용하여 드래그 컨트롤의 경계를 설정하는 방법은 무엇입니까?

  8. 8

    자바 스크립트를 사용하여 클릭에 HTML의 DIV를 제거하는 방법

  9. 9

    Bokeh : 클릭하고 드래그하여 포인트 사이의 변위를 표시하는 방법

  10. 10

    쉘 스크립트를 사용하여 여러 단어와 파일의 해당 줄을 제거하는 방법

  11. 11

    CSS의 선형 그래디언트를 사용하여 디자인과 같은 각도를 만드는 방법

  12. 12

    MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 방법

  13. 13

    MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 방법

  14. 14

    JavaScript를 사용하여 div의 이동을 제어하는 방법

  15. 15

    그래픽 어댑터를 사용하여 임의의 "고스트"모니터 및 이상한 동작을 제거하는 방법

  16. 16

    C #을 사용하여 USB 포트를 제어하는 방법

  17. 17

    R에서 for 루프를 사용하여 일련의 그래프를 만드는 방법

  18. 18

    DecoView lib를 사용하여 2 개의 무료 seriesItem으로 그래프를 만드는 방법

  19. 19

    replaceAll을 사용하여 텍스트의 일부를 제거하는 방법

  20. 20

    Haskell에서 setElem을 사용하여 매트릭스를 업데이트하는 방법

  21. 21

    매트릭스 형태의 조인트 PMF가 있습니다. R을 사용하여 $ P (N> G) $를 찾는 방법은 무엇입니까?

  22. 22

    매니페스트를 사용하여 DPI 배율 및 호환성 비활성화를 제어하는 방법

  23. 23

    @ react-google-maps / api를 사용하여 그리기 관리자의 제어 위치를 변경하는 방법

  24. 24

    Java를 사용하여 회색조 2D 매트릭스를 JPanel에 인쇄하는 방법

  25. 25

    기본 클래스의 메서드를 사용하여 중첩 클래스에서 제네릭 형식을 반환하는 방법

  26. 26

    그리드의 부트 스트랩 4에서 sticky-top 클래스를 사용하는 방법

  27. 27

    제네릭을 사용하여 입력하는 추상 클래스에서 메서드를 재정의하는 방법은 무엇입니까?

  28. 28

    키보드를 사용하여 "클릭 앤 드래그"를 모방하는 방법이 있습니까?

  29. 29

    Android에서 드래그 한 ImageView의 위치를 저장하는 방법은 무엇입니까?

뜨겁다태그

보관