Raj*_*epe 1 android ontouchlistener android-imageview android-scrollview
我正在使用scrollview中的imageview控制器.在实现和测试方面,我发现滚动总是覆盖onTouch事件而不是imageView(dragImage).
我尝试使用它来启用滚动
scv.setOnTouchListener(null);
Run Code Online (Sandbox Code Playgroud)
这要禁用
scv.setOnTouchListener( new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
它显示了hatImage只拖动了一个非常小的动作而不是在我想要的地方拖动.当我触摸ImageView而不是scrollView时,你能告诉我禁用滚动的更好方法吗?
以下是我的工作:
public static class PlaceholderFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
/**
* Returns a new instance of this fragment for the given section number.
*/
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag_flight_bank, container, false);
r1 = (RelativeLayout) rootView.findViewById(R.id.relativeLayouyt1);
r2 = (RelativeLayout) rootView.findViewById(R.id.relativeLayouyt2);
r3 = (RelativeLayout) rootView.findViewById(R.id.relativeLayouyt3);
r4 = (RelativeLayout) rootView.findViewById(R.id.relativeLayouyt4);
r5 = (RelativeLayout) rootView.findViewById(R.id.relativeLayouyt5);
rTop = (RelativeLayout) rootView.findViewById(R.id.rTop);
scv = (ScrollView) rootView.findViewById(R.id.scrollView1);
initialise(rootView);
return rootView;
}
private void initialise(View rootView) {
// TODO Auto-generated method stub
tvCustom= (TextView) rootView.findViewById(R.id.ttvCustomize);
tvRename= (TextView) rootView.findViewById(R.id.tvRename);
tvNormal= (TextView) rootView.findViewById(R.id.tvNorma);
tvExper= (TextView) rootView.findViewById(R.id.txExper);
...
dragImage = (ImageView) rootView.findViewById(R.id.dragImage);
//dragImage.setVisibility(View.GONE);
dragImage.setOnTouchListener(new OnTouchListener(){
private int _xDelta;
private int _yDelta;
@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) dragImage
.getLayoutParams();
_xDelta = X - lParams.leftMargin;
_yDelta = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams ParamsA = (RelativeLayout.LayoutParams) dragImage
.getLayoutParams();
ParamsA.leftMargin = X - _xDelta;
ParamsA.topMargin = Y - _yDelta;
ParamsA.rightMargin = -250;
ParamsA.bottomMargin = -250;
dragImage.setLayoutParams(ParamsA);
break;
}
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
解决方案:在beginnging(onCreteView)处插入
scv.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View p_v, MotionEvent p_event)
{
dragImage.getParent().requestDisallowInterceptTouchEvent(false);
// We will have to follow above for all scrollable contents
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
在setOnTouchListener中,onTouch方法:
v.getParent().requestDisallowInterceptTouchEvent(true);
Run Code Online (Sandbox Code Playgroud)
下面的代码添加到您MotionEvent.ACTION_DOWN和MotionEvent.ACTION_MOVE情况应该解决您的问题:
dragImage.getParent().requestDisallowInterceptTouchEvent(true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |