我已将myTouchlistener直接设置在RelativeLayout上,但从未调用过。你有什么建议我可能做错了吗?我的代码:
layout_own_container.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "WTF", Toast.LENGTH_SHORT).show();
final int X = (int) event.getRawX();
float dest = 0;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
_xDelta = X - lParams.leftMargin;
break;
case MotionEvent.ACTION_UP:
switch (view.getId()){
case 1:
dest = bIOwn.getWidth() + bIWish.getWidth();
break;
}
ObjectAnimator animation2 = ObjectAnimator.ofFloat(view, "x", dest);
animation2.setDuration(100);
animation2.start();
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
float width = layout_own_top.getWidth() - dest;
if (view.getWidth() != width){
RelativeLayout.LayoutParams layoutParams_move = (RelativeLayout.LayoutParams) view.getLayoutParams();
layoutParams_move.leftMargin = X - _xDelta;
layoutParams_move.rightMargin = -(layout_own_top.getWidth() + 200);
view.setLayoutParams(layoutParams_move);
}
break;
}
layout_own_top.invalidate();
return true;
}
});
修改
这是我的xml:
<RelativeLayout
android:id="@+id/relative_iown_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#26466D"
android:orientation="vertical" >
<Button
android:id="@+id/button_iOwn"
style="?android:attr/buttonStyleSmall"
android:layout_width="80sp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="#003f62"
android:text="" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10sp"
android:text="iOwn"
android:textColor="#FFFFFF"
android:textSize="28sp"
android:textStyle="bold" />
<Button
android:id="@+id/button_iWish"
style="?android:attr/buttonStyleSmall"
android:layout_width="80sp"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/button_iOwn"
android:background="#0e6798"
android:text="" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="85sp"
android:text="iWish"
android:textColor="#FFFFFF"
android:textSize="28sp"
android:textStyle="bold" />
</RelativeLayout>
答案 0 :(得分:1)
但你在这里做错了。您已经提到需要触及RelativeLayout,但在这里您正在使用
layout_own_container = new LinearLayout(this);
表示线性布局。因此,您必须在onCreate()方法上更改并找到相对布局的ID。
RelativeLayout rel = (RelativeLayout) findViewById(R.id.relative_iown_top);
rel.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "WTF", Toast.LENGTH_SHORT).show();
final int X = (int) event.getRawX();
float dest = 0;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
_xDelta = X - lParams.leftMargin;
break;
case MotionEvent.ACTION_UP:
switch (view.getId()){
case 1:
dest = bIOwn.getWidth() + bIWish.getWidth();
break;
}
ObjectAnimator animation2 = ObjectAnimator.ofFloat(view, "x", dest);
animation2.setDuration(100);
animation2.start();
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
float width = layout_own_top.getWidth() - dest;
if (view.getWidth() != width){
RelativeLayout.LayoutParams layoutParams_move = (RelativeLayout.LayoutParams) view.getLayoutParams();
layoutParams_move.leftMargin = X - _xDelta;
layoutParams_move.rightMargin = -(layout_own_top.getWidth() + 200);
view.setLayoutParams(layoutParams_move);
}
break;
}
layout_own_top.invalidate();
return true;
}
});
答案 1 :(得分:1)
尝试android:descendantFocusability
将其设置为blocksDescendants
= 2。