Android:制作可滚动的自定义视图

时间:2010-05-09 20:48:07

标签: android view

我已经滚动了我自己的自定义视图,可以直接绘制到屏幕上,但我真正想做的是将屏幕的测量高度设置为1000px并让用户在Y轴上滚动,但我这样做有问题。有人可以帮忙吗?

以下是一些代码:

public class TestScreen extends Activity  {
     CustomDrawableView mCustomDrawableView;
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);    
         mCustomDrawableView = new CustomDrawableView(this);
         setContentView(mCustomDrawableView);
     }
 }

public class CustomDrawableView extends View {

    public CustomDrawableView(Context context) {
        super(context);
        setVerticalScrollBarEnabled(true);
        setMinimumHeight(1000);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawLine(...);
        // more drawing
    }
}

我试图通过调用super来覆盖scrollTo,scrollBy,awakenScrollBars等,但无济于事。我错过了一些愚蠢的事情,还是我犯了一些根本性的错误?

提前谢谢你,

马丁

增加:

我尝试将此作为自定义组件添加到下面的布局文件中,并将TestScreen中的代码更改为使用setContentView(R.layout.exampleLayout)指向正确的资源,但这会导致模拟器崩溃。我尝试将代码评论到最低限度但它仍然崩溃,所以我正在做的事情根本就是错误但是我不确定它是什么:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content">
       <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent">
            <com.martyn.testApp.CustomDrawableView
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"
             />
       </ScrollView>
</LinearLayout>

3 个答案:

答案 0 :(得分:16)

只需将您的视图放入ScrollView!

请注意,ScrollWiew应该是根节点 (这是你的LinearLayout)

答案 1 :(得分:6)

如果您希望整个活动成为ScrollView,请执行以下操作:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/android:list"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" >

  <LinearLayout android:id="@+id/scrollBody"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/string1" />

    <TextView android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/string2" />

  </LinearLayout>

</ScrollView>

然后使用此布局的活动可能如下所示:

public class ScrollingActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.scroll_layout);
    }
}

这假设您的xml文件的名称是scroll_layout.xml。

答案 2 :(得分:4)

如果您想自己滚动,可以在覆盖自定义视图的onTouchEvent方法时使用ScrollerVelocityTracker。为了帮助您实现它,我建议您查看这些类的Javadoc,并查看像NumberPicker一样滚动的android小部件实现。