【问题标题】:View Position In Layout查看布局中的位置
【发布时间】:2012-06-30 01:19:54
【问题描述】:

加载类(视图):

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

}

Activity 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_centerHorizo​​ntal="true"。我该怎么做?

【问题讨论】:

    标签: java android


    【解决方案1】:

    您需要为视图设置 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 的 View 都有自己的 LayoutParams 类,因此,例如,如果您想使用 LinearLayout 而不是 FrameLayout,则可以使用 LinearLayout.LayoutParams。不同类型的 Params 具有不同的构造函数选项,因此您可以尝试使用它并找到最适合您的参数。祝你好运。

    【讨论】:

    • 在这部分-> FrameLayout frame = new FrameLayout(context);上下文来自哪里?
    • context 是当前活动实例的上下文,通常使用关键字this 获得。例如,如果您的 Activity 称为 TestActivity,则您的上下文将是 TestActivity.this
    • 其实我是这样做的,但是当我运行它时...模拟器显示一个黑页!
    • 啊,我忘了给框架添加加载。我已经编辑了我的代码 sn-p。
    • 我做到了。我可以观看它,但视图仍在其位置!
    猜你喜欢
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多