여러 개의 사용자 정의 뷰가있는 HorizontalScrollView가 있습니다. HorizontalScrollView에서 핀치 확대/축소 이벤트를 감지하고 ScaleFactor를 자식 뷰에 전달합니다. 부모가 제공 한 ScaleFactor에 따라 하위 뷰의 크기를 조정하려고합니다.뷰의 onDraw 메소드가 너무 많이 호출되었습니다.
저는 이렇게하고 있습니다.
자식보기에 두 가지 변수가 있습니다. localScaleFactor 및 먼저 부모로부터 parentScalefactor를 가져옵니다. 그런 다음 사용자 정의 뷰의 onDraw 메서드에서 뷰의 크기를 조정하고 싶습니다.
localScaleFactor * = parentScalefactor canvas.scale (localScaleFactor, localScaleFactor);
하지만 내 onDraw 함수가 여러 번 호출 할 때 동물원을 한 번 꼬집어도 localScaleFactor가 매우 빠르게 증가하고 있습니다.
부모 핀치 줌 리스너
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));
//sending pinch zoom event to its child index 'start' to 'last'
for(int i=start;i<=last;i++)
{
LinearLayout ll=(LinearLayout)pp.getChildAt(i);
DrawView view=(DrawView)ll.findViewById(R.id.drawview);
view.mScaleFactor=mScaleFactor; //setting child scalefactor
view.invalidate();
}
return true;
}
}
아동 된 onDraw 볼 방법
public float mScaleFactor = 1.f; //this will be set by parent viewgroup
public float sf = 1.f; //local scalefactor
public float oldsf=1.f;
@Override
public void onDraw(Canvas canvas) {
sf=(mScaleFactor/oldsf);
width=sf*700;
paint.setColor(Color.GREEN);
canvas.save();
canvas.scale(sf , 1);
Log.e("Ronak","DrawView "+sf);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLUE);
canvas.drawRect(r, paint);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLACK);
canvas.drawRect(r, paint);
requestLayout();
oldsf=mScaleFactor;
}
핀치를 어떻게 구현하고 있습니까? 핀치 동안 터치 이벤트가 지속적으로 전송되는 많은 시간. 즉, 코드가 두 손가락의 점에서 실제로 많은 핀치를 많이 감지하여 단일 핀치를 감지 할 수 있습니다. –
@RazsApps 핀치 줌 코드를 추가했습니다. 내가 잘못하고 있는지 확인하십시오. 관련 코드 만 추가했습니다. 따라서 코드의 일부를 얻지 못하면 회신하십시오. – user3265443
ScaleGestureDetector에서 직접 작업 한 적이 없으므로 정확한 답이 없습니다.하지만 제가 사용했던 다른 제스처와 계속해서 이벤트를 계속 보내고 있습니다. 다시 한 번 사용자가 손가락을 화면에 올려 놓고 약간의 움직임이있는 한. 또한 전체 운동의 합계로 보냈는데 이는 각 이벤트 간의 차이점을 추적해야 함을 의미합니다. 나는 당신이 비슷한 문제를 겪고 있다고 의심합니다. 따라서 총 꼬집음은 2.0의 요인이 될 수 있지만, 1.2, 1.5, 1.6, 1.9, 2.0과 같은 여러 이벤트가 나타날 수 있습니다. 실제 계수를 곱하면 11 배가됩니다. –