加载课程(查看):
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, 100, 100);
this.invalidate();
}
}
活动onCreate方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
InputStream inputStream = null;
try {
inputStream = getAssets().open("loading.gif");
} catch(IOException e) {
e.printStackTrace();
}
Loading loading = new Loading(this, inputStream);
setContentView(loading);
}
我想将视图设置在设备布局的中心。就像在XML布局中一样,我们可以设置android:layout_centerHorizontal =“true”。我该怎么办?
答案 0 :(得分:0)
您需要为View设置LayoutParams。我要做的是将自定义视图放在容器中,例如FrameLayout。然后,创建视图并为视图设置FrameLayout.LayoutParams,重力设置为CENTER_HORIZONTAL。它看起来像这样
FrameLayout frame = new FrameLayout(context);
FrameLayout.LayoutParams flParams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_HORIZONTAL
);
Loading loading = new Loading(this, inputStream);
loading.setLayoutParams(flParams);
frame.addView(loading);
setContentView(frame);
您可能希望配置FrameLayout以使其显示您想要的效果。
以下是我使用的LayoutParams构造函数的文档:http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html#FrameLayout.LayoutParams%28int,%20int,%20int%29
重要的是要记住,扩展ViewParent的每个视图都有自己的LayoutParams类,因此,例如,如果你想使用LinearLayout而不是FrameLayout,你可以使用LinearLayout.LayoutParams。不同类型的Params有不同的构造函数选项,因此您可以使用它并找到最适合您的选项。祝你好运。