我正在使用scrollview中的imageview控制器。在实现和测试方面,我发现滚动总是覆盖onTouch事件而不是imageView(dragImage)。
我尝试使用它来启用滚动
scv.setOnTouchListener(null);
这是禁用
scv.setOnTouchListener( new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
它表明,dragImage只拖动了一个非常小的动作而不是在我想要的地方拖动。当我触摸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;
}
});
解决方案: 插入在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;
}
});
在setOnTouchListener中,onTouch方法:
v.getParent().requestDisallowInterceptTouchEvent(true);
答案 0 :(得分:6)
将以下代码添加到MotionEvent.ACTION_DOWN
和MotionEvent.ACTION_MOVE
案例中以解决您的问题:
dragImage.getParent().requestDisallowInterceptTouchEvent(true);
答案 1 :(得分:0)
我终于让这个工作了,你还需要在onTouch事件中返回true。以下代码将缩放图像以填充imageview像素宽度。用户可以拖动封面图片重新定位,您需要跟踪Y矩阵以便以后显示。 ImageView比例类型设置为Matrix。
<script src="https://raw.githack.com/eduardolundgren/tracking.js/master/build/tracking.js"></script>
<script src="https://raw.githack.com/eduardolundgren/tracking.js/master/build/data/face.js"></script>
<div class="demo-title">
<p><a href="http://trackingjs.com" target="_parent">tracking.js</a> - hover image to see all faces detected</p>
</div>
<div class="demo-frame">
<div class="demo-container"> <span id="photo"><img id="img" src="https://raw.githubusercontent.com/eduardolundgren/tracking.js/master/examples/assets/faces.jpg" /></span>
</div>
</div>