【发布时间】:2021-03-11 08:11:54
【问题描述】:
我正在制作一个在照片上添加贴纸的应用,我想通过捏合手势调整贴纸的大小。
final ImageView newSticker = new ImageView(getApplicationContext());
newSticker.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT));
Bitmap sticker = BitmapFactory.decodeResource(getResources(),galleryList[position]);
newSticker.setImageBitmap(sticker);
viewGroup.addView(newSticker);
我有一个带有 ImageView 的框架布局,我正在上面添加视图。这是贴纸的 onTouch 方法:
newSticker.setOnTouchListener(new View.OnTouchListener()
{
PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down
PointF StartPT = new PointF(); // Record Start Position of 'img'
float olddistance;
@Override
public boolean onTouch(View v, MotionEvent event)
{
selectedSticker = newSticker;
switch (event.getAction())
{
case MotionEvent.ACTION_MOVE :
if(event.getPointerCount() == 1)
{
newSticker.setX((int) (StartPT.x + event.getX() - DownPT.x));
newSticker.setY((int) (StartPT.y + event.getY() - DownPT.y));
}
else if(event.getPointerCount() == 2)
{
final float dX =event.getX(0) - event.getX(1);
final float dY =event.getY(0) - event.getY(1);
float newdistance = (float) Math.sqrt(dX * dX + dY * dY);
float distance = newdistance / olddistance;
FrameLayout.LayoutParams lp= new FrameLayout.LayoutParams((int) (newSticker.getHeight() * distance), (int) (newSticker.getWidth() * distance));
newSticker.setLayoutParams(lp);
}
StartPT.set( newSticker.getX(), newSticker.getY() );
break;
case MotionEvent.ACTION_DOWN :
if(event.getPointerCount() == 1)
{
DownPT.set(event.getX(), event.getY());
StartPT.set(newSticker.getX(), newSticker.getY());
}
else if(event.getPointerCount() == 2)
{
final float odX =event.getX(0) - event.getX(1);
final float odY =event.getY(0) - event.getY(1);
olddistance = (float) Math.sqrt(odX * odX + odY * odY);
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_UP :
// Nothing have to do
break;
default :
break;
}
return true;
}
});
在上面的代码中,它成功地移动了贴纸,但我不知道如何调整视图的大小。我不希望贴纸在该视图内缩放,但我希望调整整个视图的大小。所以我想用捏来改变布局参数。
【问题讨论】:
标签: android view resize layoutparams pinch