私はこのコードを実装しました。これにより、基本的にユーザーは画面上でレイアウトを移動できます(Y軸のみ)。
public class MainActivity extends Activity implements View.OnTouchListener{
TextView _view;
private int _yDelta;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_view = (TextView) findViewById(R.id.textView2);
_view.setOnTouchListener(this);
}
public boolean onTouch(View view, MotionEvent event) {
final int Y = (int) event.getRawY();
view = (View) view.getParent();
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
_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:
if (Y - _yDelta < -230 || Y - _yDelta > 160){
//to avoid view going out of screen
} else {
lParams.topMargin = Y - _yDelta;
}
lParams.bottomMargin = -250;
view.setLayoutParams(lParams);
break;
}
return true;
}
}
そしてこれは私のxmlです:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="300px"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:src="@drawable/bg" />
<RelativeLayout
android:id="@+id/draggableContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/imageView1"
android:background="#ffffff" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DRAGMEDRAGME DRAGME DRAGME DRAGME"
android:textSize="25sp" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_below="@id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, it amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt cillum dolore eu it amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt cillum dolore eu it amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt cillum dolore eu it amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt cillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariatur ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariaturcillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
android:textSize="18sp" />
</LinearLayout>
</ScrollView>
</RelativeLayout>
textView1
「タイトル」をドラッグしないとスクロール可能です。タイトルをドラッグすると、レイアウト全体(draggableContent --as view.getParent()
)が動き回ります。しかし、そのlorem ipsumをスクロールしようとすると、スクロールできなくなります。
これを修正する方法はありますか?
「scrollable=true」のようなパラメータを見つけようとしましたが、見つかりませんでした。
ありがとう。
編集 レイアウトを使用する代わりに、すべてをWebViewに置き換えましたが、まったく同じように動作します。ドラッグせずに、そのスクロールが機能しています。ドラッグすると、スクロールは機能しなくなります。