Почему-то у программа никак не реагирует на прикасание к картинке. В чём может быть проблема?
public class MainActivity extends AppCompatActivity {
private ImageView mImageView;
private ViewGroup mMoveLayout;
private int mX;
private int mY;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMoveLayout = (ViewGroup) findViewById(R.id.move);
mImageView = new ImageView(this);
mImageView.setImageResource(R.drawable.cardsa1);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(100, 100);
mImageView.setLayoutParams(layoutParams);
mImageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int X = (int) event.getRawX();
final int Y = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
mX = X - lParams.leftMargin;
mY = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
layoutParams.leftMargin = X - mX;
layoutParams.topMargin = Y - mY;
layoutParams.rightMargin = -250;
layoutParams.bottomMargin = -250;
v.setLayoutParams(layoutParams);
break;
}
return true;
}
});
}
}
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Чтобы ваш виджет реагировал на нажатия, добавьте в xml разметке вашей активности к данному виджету такие свойства (вопрос enSO):
android:clickable="true"
android:focusable="true"
так же для обработки нажатий можно использовать не только setOnTouchListener, но и setOnClickListener:
imgview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
UPDATE
Я только заметил что вы создаете виджет программно, попробуйте установить ему такой параметр:
imgview.setClickable(true);
и так можно попробовать:
imgview.setFocusableInTouchMode(true);
и еще так:
imgview.requestFocus();