私はアンドロイドマーケット(ViewPager)のように水平スクロールページを持っています。水平スクロールViewPager内での表示
私の問題は、いくつかの画像で水平スクロール表示をしたいのですが、それは可能ですか?
今のところ、私のビューで少しスクロールしてから、ページ全体がスクロールしています。
ありがとうございました!
私はアンドロイドマーケット(ViewPager)のように水平スクロールページを持っています。水平スクロールViewPager内での表示
私の問題は、いくつかの画像で水平スクロール表示をしたいのですが、それは可能ですか?
今のところ、私のビューで少しスクロールしてから、ページ全体がスクロールしています。
ありがとうございました!
<Linearlayout>
<linearlayout>
<scrollView>
<ImageView1></ImageView>
<ImageView2></....>
</scrollView>
</Linearlayout>
<EditText>
</Linearlayout>
上記の場合、scrollVIewは、edittext以外の2つの画像にのみ適用できます。他の場合には
:
<Linearlayout>
<linearlayout>
<scrollView>
here listVIew with Images using listView adapter
</scrollView>
</Linearlayout>
<EditText>
</Linearlayout>
ここscrollViewはListViewコントロールに適用されます。
HorizontalScrollView
を延長してタッチイベントを傍受する必要があります。代わりにあなたのレイアウトXMLでHorizontalScrollView
を使用しての、このカスタムビューを使用する必要があり、その後
public class MyScrollView extends HorizontalScrollView {
public MyScrollView(Context p_context, AttributeSet p_attrs)
{
super(p_context, p_attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent p_event)
{
return true;
}
@Override
public boolean onTouchEvent(MotionEvent p_event)
{
if (p_event.getAction() == MotionEvent.ACTION_MOVE && getParent() != null)
{
getParent().requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(p_event);
}
}
:どのような私のために働いたことは、次のサンプルでした。それが1に達するまでHorizontalScrollViewがスクロールします:私は、このソリューションを取得助けた何
は、私は解決策を再加工し、最終的にそれをそれはGMailの上で行われています同じように実装するための非常に単純な方法を見つけたthis post
それは私のために働く、他の解決策はありません!しかし、それはあなたのカスタムスクロールビュー内のボタンのクリック処理を無効にするようです。何か案が? – user1365836
@ user1365836うん...ちょっと面倒なことがあります...私がしたことは、getHitRectを使って正確なボタンを押してから、そのonClick関数を呼び出すことでした。 – Muzikant
あなたがしたいのはスクロールを許可しても、ユーザーが内部の要素をクリックするには、onInterceptTouchEvent()内からすべてを制御するだけです。 https://gist.github.com/brandondenney/b8ddd655664eb295129d – Brandon
ですそのエッジの。次に、次のスクロールでは、ページ全体がスクロールします。
HorizontalScrollViewをオーバーライドしてスクロール方向とエッジを確認し、コンテンツが実際にスクロールできることを確認するだけでした。
@Override
public boolean onTouchEvent(MotionEvent ev)
{
if (no_scrolling)
return false;
// Standard behavior
//
return super.onTouchEvent(ev);
}
boolean no_scrolling = false;
float old_x, old_y;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
int action = ev.getActionMasked();
Log.d(at_data.TAG, "HSV scroll intercept: " + String.format("0x%08x", action));
if (action == MotionEvent.ACTION_DOWN)
{
old_x = ev.getX();
old_y = ev.getY();
no_scrolling = false;
}
else if (action == MotionEvent.ACTION_MOVE)
{
float dx = ev.getX() - old_x;
float dy = ev.getY() - old_y;
if (Math.abs(dx) > Math.abs(dy) && dx != 0)
{
View hsvChild = getChildAt(0);
int childW = hsvChild.getWidth();
int W = getWidth();
Log.d(at_data.TAG, "HSV " + childW + " > " + W + " ? dx = " + dx + " dy = " + dy);
if (childW > W)
{
int scrollx = getScrollX();
if ((dx < 0 && scrollx + W >= childW) || (dx > 0 && scrollx <= 0))
{
Log.d(at_data.TAG, "HSV Wider: on edge already");
no_scrolling = true;
return false;
}
else
{
Log.d(at_data.TAG, "HSV Wider: can scroll");
no_scrolling = false;
}
}
else
{
Log.d(at_data.TAG, "HSV cannot scroll in desired direction");
no_scrolling = true;
}
}
}
// Standard behavior
//
return super.onInterceptTouchEvent(ev);
}
watch [this](http://stackoverflow.com/questions/7774642/scroll-webview-horizontally-inside-a-viewpager)答え。しかし、その答えにカスタムWebViewの代わりに、HorizontalScrollingViewを拡張する必要があるかもしれません。 – grine4ka