0

在此处输入图像描述 我的父母线性布局

        <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 类的实例创建的视图设置布局参数

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

请提供任何帮助建议。

4

2 回答 2

1

你必须使用 LinearLayout.LayoutParams,你做对了。

你应该检查:

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

  2. 视图内的 gif 是否正确扩展:扩展视图大小时图像是否被拉伸?我建议您使用彩色背景来了解 View 和 Layout 的确切界限,我多次遇到这个问题,所以我把它作为例行公事:)

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

    公共类 GifWebView 扩展 ImageView {

    // (...)

    gif_view.setScaleType(ScaleType.CENTER_INSIDE);

于 2013-09-29T20:09:44.973 回答
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" />
于 2013-09-30T04:25:05.913 回答