Ich habe eine RecyclerView
, und als ein Element unter anderem gibt es eine SimpleDraweeView
. Ich möchte feststellen, ob der Benutzer den linken oder den rechten Teil des SimpleDraweeView
angeklickt hat und dann die Sachen entsprechend machen. Ich habe versucht, onTouchListener
einrichten, aber es wird mehrmals statt einmal aufgerufen, und auch wenn ich mit der RecyclerView
scrollen wird es wieder aufgerufen.Ermitteln, ob die linke oder rechte Seite von ImageView geklickt wurde
holder.getDoubleImageBinding().ivImage.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getX() < holder.getDoubleImageBinding().ivImage.getWidth()/2) {
mListener.onClickLeft();
} else {
mListener.onClickRight();
}
return false;
}
});
ich auch die Breite und X
versucht haben, immer und Einstellung onClickListener
, aber X
ist immer 0,0.
holder.getDoubleImageBinding().ivImage.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
imageWidth = holder.getDoubleImageBinding().ivImage.getWidth()/2;
imageX = holder.getDoubleImageBinding().ivImage.getX();
holder.getDoubleImageBinding().ivImage.getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
});
holder.getDoubleImageBinding().ivImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (imageWidth > imageX) {
mListener.onClickLeft();
} else {
mListener.onClickRight();
}
}
});
EDIT:
Am Ende entschied ich mich hinter dem ImageView
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/iv_image"
android:layout_width="0dp"
android:layout_height="299dp"
android:layout_marginTop="20dp"
android:src="@drawable/ap_circle"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline"
fresco:placeholderImage="@drawable/ap_placeholder"/>
<Button
android:id="@+id/btn_left"
android:layout_width="0dp"
android:layout_height="299dp"
android:background="@android:color/transparent"
app:layout_constraintBottom_toBottomOf="@id/iv_image"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/btn_right"
app:layout_constraintTop_toTopOf="@id/iv_image"/>
<Button
android:id="@+id/btn_right"
android:layout_width="0dp"
android:layout_height="299dp"
android:background="@android:color/transparent"
app:layout_constraintBottom_toBottomOf="@id/iv_image"
app:layout_constraintLeft_toRightOf="@id/btn_left"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/iv_image"/>
Ich glaube, Sie sollten das onTouchEvent bekommen? – samiunn
Wie ich schon sagte, habe ich 'onTouchEvent' versucht, aber es wird für jedes Element der Liste in' RecyclerView' abgefeuert und auch wenn ich blättern gehe, wird es wieder gefeuert. – jlively