使用复合的控件制作自定义view
此处需要美工配合
先说布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white"
>
<RelativeLayout
android:id="@+id/mearsure_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/mearsure_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="1"
android:textColor="@color/dietitian_color"
android:textSize="44.0sp" />
<TextView
android:id="@+id/mearsure_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/mearsure_value"
android:layout_marginBottom="6dp"
android:layout_toRightOf="@+id/mearsure_value"
android:text="杯"
android:textColor="@color/middle_grey"
android:textSize="22.0sp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/mearsure_container"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_marginTop="0dp" >
<ImageView
android:layout_width="fill_parent"
android:layout_height="90dp"
android:layout_marginTop="5dp"
android:src="@drawable/userinfo_scroll_bg" />
<com.example.ruler.ObservableHorizontalScrollView
android:id="@+id/mearsure_scrollview"
android:layout_width="260dp"
android:layout_height="75dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="12dp"
android:scrollbars="none" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="1262dp"
android:layout_height="60dp"
android:layout_marginLeft="95dp"
android:layout_marginRight="95dp"
android:src="@drawable/userinfo_scroll_weight" />
</LinearLayout>
</com.example.ruler.ObservableHorizontalScrollView>
<ImageView
android:layout_width="2.0dp"
android:layout_height="65dp"
android:layout_centerHorizontal="true"
android:src="@drawable/userinfo_red_line_2" />
<ImageView
android:layout_width="fill_parent"
android:layout_height="90dp"
android:layout_marginTop="5dp"
android:src="@drawable/userinfo_scroll_top" />
</RelativeLayout>
</LinearLayout>
xml效果:
中间的scrollview需要重写,添加监听
public boolean onTouchEvent(MotionEvent paramMotionEvent) {
if (this.scrollViewListener != null) {
HorizontalsScrollViewListener localHorizontalsScrollViewListener = this.scrollViewListener;
int i = getScrollX();
this.lastScrollX = i;
localHorizontalsScrollViewListener
.onScrollChanged(this, i, 0, 0, 0);
}
switch (paramMotionEvent.getAction()) {
}
for (;;) {
this.handler.sendMessageDelayed(this.handler.obtainMessage(), 5L);
return super.onTouchEvent(paramMotionEvent);
}
}
需要获取刻度尺值的。activity实现滚动的接口
@Override
public void onScrollChanged(
ObservableHorizontalScrollView paramObservableHorizontalScrollView,
int paramInt1, int paramInt2, int paramInt3, int paramInt4) {
// TODO Auto-generated method stub
this.birthday_ = (30.0F + 90.0F * ((float) paramInt1 / MainActivity
.dip2pixel(this, 632.0F)));
this.birthday_ = Math.round(this.birthday_);
float v = Float.valueOf(this.birthday_);
tv1.setText(String.format("%.0f", v));
this.yearScrollView_.scrollTo(paramInt1, paramInt2);
}
public static int dip2pixel(Context paramContext, float paramFloat) {
return (int) TypedValue.applyDimension(1, paramFloat, paramContext
.getResources().getDisplayMetrics());
}
最终完成图:
源码下载地址: