我有一个包含TextView的FrameLayout,我将OnTouchListener添加到FrameLayout中以执行translateX作业。然后将OnClickListener添加到TextView来更改文本。然后,FrameLayout无法翻译X。
如何解决此冲突?我希望TextView可以执行单击运算符,而FrameLayout可以执行translationX。
有人可以帮助我吗?谢谢!
布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/panel"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"/>
</FrameLayout>
然后在“活动”中
public class MainActivity3 extends AppCompatActivity {
float downX = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_frame);
FrameLayout panel = findViewById(R.id.panel);
panel.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = event.getX();
return true;
case MotionEvent.ACTION_MOVE:
float dx = event.getX() - downX;
panel.setTranslationX(dx);
return true;
case MotionEvent.ACTION_UP:
return true;
}
return false;
}
});
TextView textView = findViewById(R.id.textView);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText("this is textview click");
}
});
}
}
答案 0 :(得分:0)
您的问题是TextView上的match_parent
属性占用了整个可用空间。将match_parent
更改为wrap_content
,它应该可以正常工作。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/panel"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"/>
</FrameLayout>
您的FrameLayout触发器隐藏在TextView的后面,因为TextView已接管了所有可用空间。
答案 1 :(得分:0)
首先,您必须使textView可见Rect
Rect visibleRect = new Rect();
yourTextView.getGlobalVisibleRect();
然后检查您的触摸事件坐标
if (event.getX()>= visibleRect.left and event.getX()<=visibleRect.right and
event.getY>=visibleRect.bottom and event.getY<= visibleRect.top)
{
//perform click on textView
return
}