我有自定义视图:
public class Loading extends View {
private long movieStart;
private Movie movie;
public Loading(Context context, InputStream inputStream) {
super(context);
movie = Movie.decodeStream(inputStream);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
super.onDraw(canvas);
final long now = SystemClock.uptimeMillis();
if(movieStart == 0)
movieStart = now;
final int relTime = (int)((now - movieStart) % movie.duration());
movie.setTime(relTime);
movie.draw(canvas, 0, 0);
this.invalidate();
}
}
如何在XML布局中使用此视图?如何在XML布局中传递参数(Context,InputStream)?
答案 0 :(得分:0)
How can I use this view in XML layout?
...
<pacakge_of_class.Loading
android:id="@+id/y_view1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
http://developer.android.com/guide/topics/ui/custom-components.html
当从代码和form that is called when the view is inflated from a layout file. The second form should parse and apply any attributes defined in the layout file
创建视图时,会调用构造函数的一种形式。
How can I pass the parameters
https://stackoverflow.com/a/4495745/804447
Error referencing an inner class View in layout/main.xml
<view class="Your_package.MainClass$Loading" />
答案 1 :(得分:0)
简短的回答是你不能直接这样做。
答案很长,你可以间接地做到这一点。
通过其完全限定名称(正如其他人提到的那样)将视图添加到XML,然后:
您需要做的是从View实现常规构造函数。定义一个自定义属性,声明用于在构造函数中创建InputStream的资源。视图系统会自动为您提供上下文,然后您需要根据提供的属性值打开InputStream。
答案 2 :(得分:0)
您可以在XML-Layout中使用自定义视图,如下所示:
<com.your.package.Loading
android:id="@+id/y_view1"
... />
但是你不能使用自己的构造函数,你必须使用this answer中所示的构造函数。
所以你必须通过代码访问你的加载视图,手动设置InputStream:
Loading yourView = (Loading) findViewById(R.id.yourLoadingView);
yourView.setInputStream();
您在Loading
班级中使用此setter方法:
public void setInputStream(InputStream inputStream){
movie = Movie.decodeStream(inputStream);
}