所以我试图像滚动视图一样创建iMovie,当滚动视图中的图像触摸白线时我想要回调(所以我可以更改大图像)。我怎么能这样做?
答案 0 :(得分:7)
这个解决方案对我有用,而且这是我在对HorizontalScrollView的选项进行长期研究后能够得出的唯一解决方案。
ImageView lineImage =(ImageView)findViewById(R.id.yourImageViewIdOfWhiteLineImage);
然后在horizontalScrollView的onTouchListener
中public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()){
case MotionEvent.ACTION_MOVE:
//get horizontal scroll view for images
HorizontalScrollView parent=(HorizontalScrollView)v;
//get linear layout for list of images
LinearLayout wholeList=(LinearLayout)parent.getChildAt(0);
int centerCord[] = new int[2];
for(int idx=0;idx<wholeList.getChildCount();idx++){
ImageView discoveredIv=(ImageView)wholeList.getChildAt(idx);
discoveredTv.getLocationInWindow(centerCord);
int discoveredX=centerCord[0];
//set these (lineImage.getLeft()-20, lineImage.getLeft()+20) according to your
//requirement, the way it best suits you. You'll have to test in runtime, how your
//views come under the line and then set these.
if(discoveredX >= lineImage.getLeft()-20 && discoveredX <= lineImage.getLeft()+20)
{
//you have a winner, take that image from imageView and set it wherever you want.
//Your image is in discoveredIv
}
}
return false;
case MotionEvent.ACTION_UP:
//It returns true to avoid fling effect, otherwise this method won't work.
return true;
}
return false;
}
这完全符合您的要求。但是我建议你在ACTION_UP情况下使用这个代码,因为如果你在ACTION_MOVE中进行所有这些计算,那么这个代码有可能使你的应用程序在滚动时变慢,而且,计算越多,应用程序的速度越慢。 所以,我建议在ACTION_UP中使用它。
您可以在两种情况下测试您的应用,并决定您希望使用此代码。
答案 1 :(得分:1)
为imageview设置OnTouchListener,然后你就可以实现下面的回调。事件参考将提供您需要的一切
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
// event reference will give every co-ordinate that u need
return false;
}
答案 2 :(得分:1)
您可能希望扩展滚动的父级,以便在触摸时在屏幕上报告其位置。我不确定你的屏幕截图是否有while线,图像卷轴或两者都滚动,所以我假设白线是固定的并且图像滚动(尽管你的解决方案可以相应调整)。
在滚动ImageViews的自定义视图中:
/* @return True if the event was handled, false otherwise. */
public boolean onTouchEvent (MotionEvent event) {
switch(event.getActionMasked()) {
case MotionEvent.ACTION_MOVE: {
x = event.getRawX();
// This is the x-position on screen, compare to that of while line.
当手指移动时,您将拦截它的位置变化。我假设所有ImageView
都在父容器中,水平滚动它们。如果您需要知道手指在哪个孩子上面盘旋,请查看上一个问题:
how to get a view from an event coordinates in android?。使用这些方法,您可以在滚动ImageView
与白线重叠时知道,并相应地更新大图。
希望这有帮助!