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

我已经推出了我自己的自定义视图,可以画到屏幕上,但是我真正想要做的是将屏幕的measuredHeigh设置为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 } } 

我试图覆盖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> 

Solutions Collecting From Web of "Android:制作可滚动的自定义视图"

只要把你的看法在ScrollView!

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

如果你想要整个活动是一个滚动视图,那么做这样的事情:

 <?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。

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