複数のビューを含むレイアウトを作成したいと考えています。現在、3 つのタブがあり、そのうちの 1 つで、2 つのテキストビューと画像を含むレイアウトの特定の部分をスクロールできるようにしたいと考えています。ViewPager 、 HorizontalScrollView を使用してみましたが、レイアウトのこの部分をスクロールできませんでした。ここに私のレイアウトのデザインがあります
[一部画像][スクロール表示]
[表1]
【表2】
[タブ1][タブ2][タブ3]
ジェスチャー検出のために実行したコード
public class RegionView extends HorizontalScrollView implements View.OnTouchListener{
private static final int SWIPE_MIN_DISTANCE = 5;
private static final int SWIPE_THRESHOLD_VELOCITY = 300;
private ArrayList<ArticleList> mItems= new ArrayList<ArticleList>();
private GestureDetector mGestureDetector;
private int mActiveFeature = 0;
public RegionView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setItems();
// TODO Auto-generated constructor stub
}
public RegionView(Context context) {
super(context);
internalWrapper = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1);
internalLayout = (LinearLayout) findViewById(R.id.regionll1);
featureLayout = (LinearLayout) View.inflate(myContext,R.layout.regionview1,null);
setItems();
}
public void setItems(){
showToast("setItem Called");
internalLayout.setOnTouchListener(gestureListener);
for(int i = 0; i< mItems.size();i++){
internalLayout.addView(featureLayout);
}
setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (mGestureDetector.onTouchEvent(event)) {
return true;
}else if(event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL ){
int scrollX = getScrollX();
int featureWidth = v.getMeasuredWidth();
mActiveFeature = ((scrollX + (featureWidth/2))/featureWidth);
int scrollTo = mActiveFeature*featureWidth;
smoothScrollTo(scrollTo, 0);
return true;
}else{
return false;
}
}
});
mGestureDetector = new GestureDetector(new MyGestureDetector());
}
class MyGestureDetector extends SimpleOnGestureListener {
public boolean isRightToLeft = false;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int featureWidth = getMeasuredWidth();
mActiveFeature = (mActiveFeature < (mItems.size() - 1))? mActiveFeature + 1:mItems.size() -1;
smoothScrollTo(mActiveFeature*featureWidth, 0);
isRightToLeft=true;
return true;
}else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int featureWidth = getMeasuredWidth();
mActiveFeature = (mActiveFeature > 0)? mActiveFeature - 1:0;
smoothScrollTo(mActiveFeature*featureWidth, 0);
showToast("Gesture on right swipe");
isRightToLeft=false;
return true;
}
} catch (Exception e) {
Log.e("Fling", "There was an error processing the Fling event:" + e.getMessage());
}
return false;
}
}
}
tabhost を含む私の XML ファイルでは、コードを 2 つの部分に分割して、Horizontalscroll ビューを実装している場所を示しています。
<?xml version="1.0" encoding="utf-8"?>
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/main_bckground"
>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</RelativeLayout>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/Orange"
>
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!--First Tab-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabyourcity"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:paddingLeft="0dip"
android:paddingRight="0dip" >
</LinearLayout>
<!—Second Tab-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabnepal"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:id = "@+id/nepalpageview"
android:orientation="vertical">
<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loadContainernepal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#414141"
android:orientation="horizontal" >
<TextView
android:id="@+id/loadingTextnepal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Data is Loading...."
android:textColor="#FFF"
/> <ProgressBar
android:id="@+id/progressBar2Nepal"
android:layout_width="25dip"
android:layout_height="25dip"
android:indeterminate="true"
android:visibility="visible"
android:layout_marginLeft="160dip"
style="@android:style/Widget.ProgressBar.Small"
/>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/relativelayouttop"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/tv_sunrisetime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_sunrise"
android:layout_alignRight="@+id/tv_sunrise"
android:layout_below="@+id/tv_sunrise"
android:gravity="center"
android:text="rise time"
android:textColor="#ffffff" />
<TextView
android:id="@+id/tv_sunrise"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/img_SUNRISE"
android:layout_marginLeft="20dp"
android:gravity="center"
android:text="SUNRISE"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/Orange"
android:textSize="18sp" >
</TextView>
<ImageView
android:id="@+id/img_SUNRISE"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignLeft="@+id/tv_sunrise"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/tv_sunrise"
android:paddingTop="5dp"
android:src="@drawable/sunriseicon" />
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/img_sunset"
android:layout_alignRight="@+id/img_sunset"
android:layout_below="@+id/img_sunset"
android:gravity="center"
android:text="SUNSET"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/Orange"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_sunsettime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_sunrise"
android:layout_alignRight="@+id/tv_sunrise"
android:layout_below="@+id/TextView02"
android:gravity="center"
android:text="SET time"
android:textColor="#ffffff" />
<ImageView
android:id="@+id/img_sunset"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignLeft="@+id/tv_sunrisetime"
android:layout_alignRight="@+id/tv_sunrisetime"
android:layout_below="@+id/tv_sunrisetime"
android:src="@drawable/sunseticon" />
<RelativeLayout
android:layout_width="130dp"
android:layout_height="120dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:gravity="right" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" >
<HorizontalScrollView
android:id="@+id/horizontalScrollView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
このレイアウトですべての画像とテキスト フィールドを指定すると、コードは正常に動作しますが、値を確認し、スクロール中にテキストと画像をここに配置する必要があるため、これを実装する際に問題が発生します。
<!-- <LinearLayout
android:id="@+id/scroll_linearlayout "
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/regionll1 "
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_regionname"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Hilly Region"
android:textColor="#ffffff"
android:textSize="18sp" />
<ImageView
android:id="@+id/img_region"
android:layout_width="wrap_content"
android:layout_height="75dp"
android:src="@drawable/iconsresized5" />
<TextView
android:id="@+id/tv_regiontemp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#ffffff" />
</LinearLayout>
<LinearLayout
android:id="@+id/regionll2 "
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
android:id="@+id/regionll3 "
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout> -->
</HorizontalScrollView>
</android.support.v4.view.ViewPager>
</RelativeLayout>
</RelativeLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingRight="5dp" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="20dp"
android:background="@color/Orange"
android:gravity="center" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="25dp"
android:layout_height="20dp"
android:src="@drawable/rainfall_stastastics" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:text="Rainfall Statistics"
android:textColor="#ffffff"
android:textSize="16sp" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/tbl_background" >
<ImageView
android:id="@+id/imageView3"
android:layout_width="4dp"
android:layout_height="wrap_content"
android:src="@drawable/bullet" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Total this month to date "
android:textColor="#000000" />
<TextView
android:id="@+id/tv_totalrainfall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000" />
</TableRow>
<TableRow>
</TableRow>
</TableLayout>
<TableLayout>
</TableLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</RelativeLayout>
</TabHost>
ビューページャーによってiPhoneで得られるようなスクロールビューが欲しい