有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java视图在布局中的位置

加载类(视图):

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();
    }

}

创建方法上的活动:

@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布局中一样,我们可以设置安卓:layout\u centerHorizontal=“true”。我怎么做


共 (1) 个答案

  1. # 1 楼答案

    需要为视图设置LayoutParams。我要做的是将自定义视图放入容器中,例如FrameLayout。然后,创建视图并设置框架布局。重力设置为水平中心时视图的布局参数。看起来像这样

    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。布局参数。不同类型的参数有不同的构造函数选项,因此您可以使用它,并找到最适合您的参数。祝你好运