onClickListener や onLongClickListener などのリスナーを持つ imageView があります。onLongClickListener は、同じビューに onTouchListener を追加して応答し、モーション イベントをリッスンします。これの目的は、ユーザーがボタンを長くクリックしたときに、サイズを変更できるようにすることです。
imageView のサイズ変更は機能しますが (あまりうまくいきませんが、テストには十分です)、サイズ変更後、ビューにアタッチされたすべてのリスナーは、 imageView の元のサイズでカバーされる領域でのタッチにのみ応答します。したがって、ユーザーがボタンを下に伸ばして高さを 2 倍にすると、上半分だけがクリックおよびタッチ イベントに応答します。
どちらかにする必要がありますか。
すべてのリスナーを切り離して再接続しますか?
どういうわけかリスナーを更新しますか?
これが私のコードです
sendButton = (ImageView) findViewById(R.id.sendButton);
sendButton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.d("long click", "long click");
v.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int action = event.getAction();
int currentY = 0;
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
currentY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
if (event.getY() > currentY) {
Log.d("y dir", String.valueOf(event.getY()));
ViewGroup.LayoutParams params = buttonSpace
.getLayoutParams();
params.height++;
buttonSpace.setLayoutParams(params);
} else if (event.getY() < currentY) {
Log.d("y dir", "up");
ViewGroup.LayoutParams params = buttonSpace
.getLayoutParams();
params.height--;
buttonSpace.setLayoutParams(params);
}
currentY = (int) event.getY();
break;
}
return false;
}
});
return true;
}
});
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendButtonPressed();
}
});