2013-04-24 2 views
1

Мне нужно получить границы изображения, находящегося внутри холста, до детекса, если он был затронут или нет, но если я поверную холст, getbounds() будет поддерживать одинаковые значения, как я могу получить правильные значения после поворота холста?getbounds при повороте холста

//CODE ON VIEW CLASS: 

    canvas.save(); 
    canvas.rotate(rotation, Xpos, Ypos); 

    secHandImg.setBounds(left,top,right,bottom);  
    secHandImg.setAntiAlias(true); 
    secHandImg.draw(canvas); 

    circleHandImg.setBounds(left,top,right,bottom); 
    circleHandImg.setAntiAlias(true); 
    circleHandImg.draw(canvas); 

    canvas.restore(); 


//CODE ON FRAGMENT CLASS: 

     public boolean onTouch(View view, MotionEvent event) { 

       Rect imageBounds = MyClass.secHandImg.getBounds();   

       int action = event.getAction(); 

       final int x = (int)event.getX(); 
       final int y = (int)event.getY(); 


        if(action == MotionEvent.ACTION_DOWN) { 

    if(x >= imageBounds.left && x < (imageBounds.left + imageBounds.width()) 
    && y >= imageBounds.top && y < (imageBounds.top + imageBounds.height())){ 

//THIS DON´T WORK IF CANVAS ROTATES 
       imageBoundsTouch = true; 


       } 

     } 

Здесь изображение, чтобы лучше объяснить мою проблему:

http://s11.postimg.org/z7j0xgwmb/Imagen_2.png

ответ

0

Вы можете использовать тригонометрию, чтобы получить границы повернутого прямоугольника:

function BBoxDimensions(width,height,radianAngle){ 
    var c = Math.abs(Math.cos(radianAngle)); 
    var s = Math.abs(Math.sin(radianAngle)); 
    return({ width: height * s + width * c, height: height * c + width * s }); 
} 

И вы можете использовать tri г, чтобы получить XY повернутого ограничивающего параллелепипеда:

// where cx/cy is the center of rotation of the target 
// and startingX/startingY is the starting xy of the unrotated target 

var x1 = startingX - cx; 
var y1 = startingY - cy; 
newX =cx+ x1*Math.cos(angle) - y1*Math.sin(angle); 
newY =cy+ y1*Math.cos(angle) + x1*Math.sin(angle); 
+0

Спасибо! Я попробую, чтобы вы видели изображение? – jisdroid

+0

Это не работает Мне нужно положение на экране, а не размер прямоугольника – jisdroid

+0

См. Мой отредактированный пост, показывающий xy вращающейся ограничивающей рамки. – markE

0

Пересчитайте ваш Bounds значения onOrientationChanged()

+1

Спасибо но я не повернуть экран я отправил изображение, чтобы объяснить этот вопрос – jisdroid

Смежные вопросы