您的位置:首页 > 编程语言

安卓触屏进行的图形变换--平移,缩放核心代码

2016-03-30 10:19 393 查看

平移核心代码

...
//单指针起始位置
////MotionEvent.ACTION_DOWN,第一个指针
float originalx = motionevent.getX(index);
float originaly = motionevent.getX(index);
...

private void handleTranslate(MotionEvent ev){
final int historySize = ev.getHistorySize();
float currentx=0,currenty=0;
for(int h=0;h<historySize;h++){
currentx = ev.getHistoricalX(h);
currenty = ev.getHistoricalY(h);

matrix.postTranslate(-(originalx - currentyx), -(originaly - currentyy));
imageView.setImageMatrix(matrix);//通过图形变换完成
//等价于imageView.scrollBy((int)(originalx-currentx),(int)(original-currenty));//通过移动坐标系完成
originalx = currentx;
originaly = currenty;
}

currentx = ev.getX();
currenty = ev.getY();
matrix.postTranslate(-(originalx-currentx),-(originaly-currenty));
imageView.setImageMatrix(matrix);
originalx = currentx;
originaly = currenty;
}


缩放核心代码

...
//双指针起始位置
//MotionEvent.ACTION_DOWN,第一个指针
float originalx1 = motionevent.getX(index);
float originaly1 = motionevent.getX(index);
...
//MotionEvent.ACTION_POINTER_DOWN,第二个指针
float originalx2 = motionevent.getX(index);
float originaly2 = motionevent.getX(index);
...

private void handleScale(MotionEvent ev){
final int historySize = ev.getHistorySize();
float firstpointercurrentx1 = 0,firstpointercurrenty1 = 0,secondpointercurrentx2 = 0,secondpointercurrenty2 = 0;
//中心点
float pivotx,pivoty;
//点间距离
float old_distance,new_distance;
for(int h=0;h<historySize;h++){
firstpointercurrentx1 = ev.getHistoricalX(0,h);
firstpointercurrenty1 = ev.getHistoricalY(0,h);
secondpointercurrentx2 = ev.getHistoricalX(1,h);
secondpointercurrenty2 = ev.getHistoricalY(1,h);

pivotx = (firstpointercurrentx1+secondpointercurrentx2)/2;
pivoty = (firstpointercurrenty1+secondpointercurrenty2)/2;

old_distance = distance(originalx1,originaly1originalx2,originaly2);
new_distance = distance(firstpointercurrentx1,t\firstpointercurrenty1,secondpointercurrentx2,secondpointercurrenty2);
matrix.postScale(new_distance/old_distance,new_distance/old_distance,pivotx,pivoty);
imageView.setImageMatrix(matrix);

originalx1 = firstpointercurrentx1;
originaly1 = firstpointerecurrenty1;
originalx2 = secondpointercurrent2;
originaly2 = secondpointercurrenty2;
}

firstpointercurrentx1 = ev.getX(0);
firstpointercurrenty1 = ev.getX(0);
secondpointercurrentx2 = ev.getX(1);
secondpointercurrenty2 = ev.getX(1);

pivotx = (originalx1+originalx2)/2;
pivoty = (originaly1+originaly2)/2;

old_distance = distance(originalx1,originaly1,originalx2,originaly2);
new_distance = distance(firstpointercurrentx1,firstpointercurrenty1,secondpointercurrentx2,secondpointercurrenty2);

matrix.postScale(new_distance/old_distance,new_distance/old_distance,pivotx,pivoty);
imageView.setImageMatrix(matrix);

originalx1 = firstpointercurrentx1;
originaly1 = firstpointercurrenty1;
originalx2 = secondpointercurrentx2;
originaly2 = secondpointercurrenty2;

}

//距离计算代码
private float distance(float x1,float y1,float x2,float y2){
return (float)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 图形