如何动态设置布局参数到fill_parent

时间:2013-09-29 20:01:01

标签: java android android-layout android-view

enter image description here 我的父线性布局

        <LinearLayout
        android:id="@+id/gif_linear_layout"
        android:background="@drawable/shape"
        android:layout_marginTop="5dp"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:orientation="vertical" />

所以我有这个类GifWebView

import android.content.Context;
import java.io.InputStream;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Movie;
import android.os.SystemClock;
import android.view.View;

public class GifWebView extends View {
    private Movie mMovie;
    InputStream mStream;
    long mMoviestart;

    public GifWebView(Context context, InputStream stream) {
        super(context);
        mStream = stream;
        mMovie = Movie.decodeStream(mStream);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.TRANSPARENT);
        super.onDraw(canvas);
        final long now = SystemClock.uptimeMillis();

        if (mMoviestart == 0) 
        {
            mMoviestart = now;
        }
        int gif_image_duration = mMovie.duration();
        if(gif_image_duration==0)
        {
            gif_image_duration = 1;
        }
        final int relTime = (int) ((now - mMoviestart) % gif_image_duration);
        mMovie.setTime(relTime);
        mMovie.draw(canvas, 10, 10);
        this.invalidate();
    }
}

我在我的主要活动中创建此类的实例以显示gif图像 哪个工作得很好 在主要活动中

GifWebView gif_view;//global var

// already existing linear layout in my layout file 

// and then this in onCreate() method

gif_linear_layout = (LinearLayout)findViewById(R.id.gif_linear_layout);

InputStream stream = null;
        try {
            stream = getAssets().open(gif_name);
            //stream = getAssets().open("gif_images").;
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }

        gif_view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
        gif_linear_layout.addView(gif_view);

现在有人请告诉我如何设置通过创建GifWebVIew类实例创建的视图的布局参数

实际上我希望实例视图完全适合我的线性布局 但它不适合

请提出任何帮助。

2 个答案:

答案 0 :(得分:1)

您必须使用LinearLayout.LayoutParams,才能正确执行。

你应该检查:

  1. 父布局没有WRAP_CONTENT个参数。在这种情况下,如果布局不是必须填充所有空间的主布局,则内部视图不会扩展其大小,因为父级环绕它。

  2. 视图中的gif是否正确扩展:在查看视图大小时图像是否被拉伸?我建议你把彩色背景用来理解视图和布局的确切界限,我多次陷入这个问题,以此作为例行程序:)

  3. 看到您正确展开图像,可能是图像没有缩放。为此,您必须使用ImageView功能缩小和扩展图像。 尝试扩展ImageView而不是View,然后使用setScaleType:

    公共类GifWebView扩展了ImageView {

    //(...)

    gif_view.setScaleType(ScaleType.CENTER_INSIDE);

答案 1 :(得分:1)

// just replace your parent layout with this
 <LinearLayout
        android:id="@+id/gif_linear_layout"
        android:background="@drawable/shape"
        android:layout_marginTop="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />