将生成的ImageView放在xml ImageView中

时间:2015-02-19 14:47:03

标签: android view imageview

我有一个布局activity_main(其中包括)显示ImageView

<ImageView
        android:id="@+id/profileImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView2"
        android:layout_alignLeft="@+id/login_button" />

我创建了一个扩展ImageView的类,并显示了动画gif:

public class AnimatedGif extends ImageView
{
    private Movie mMovie;
    private long mMovieStart = 0;

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

    @Override
    protected void onDraw(Canvas canvas)
    {
        canvas.drawColor(Color.TRANSPARENT);
        super.onDraw(canvas);
        final long now = SystemClock.uptimeMillis();
        if (mMovieStart == 0)
        {
            mMovieStart = now;
        }
        final int realTime = (int)((now - mMovieStart) % mMovie.duration());
        mMovie.setTime(realTime);
        mMovie.draw(canvas, 10, 10);
        this.invalidate();
    }
}

在主要活动中,我使用以下代码:

setContentView(R.layout.activity_main);
.
.
.
InputStream stream = this.getResources().openRawResource(R.drawable.searching_gif);
AnimatedGif gifImageView = new AnimatedGif(this, stream);
ImageView im = (ImageView)findViewById(R.id.profileImageView);

如何让im显示gifImageView ??

2 个答案:

答案 0 :(得分:0)

你不能。至少就你的方式而言。您需要进行一些最小的更改,才能将AnimatedGif直接加载到布局中。第一个是构造函数,它将ContextAttributeSet

作为参数
public AnimatedGif(Context context, AttributeSet attrs) {

}

这样您可以直接将其添加为xml项,指定类的完整限定包

<com.package.AnimatedGif
     android:id="@+id/profileImageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView2"
    android:layout_alignLeft="@+id/login_button" />

现在您可能希望使用自定义属性来指定要加载的gif。所以你可以在你的attr.xml文件中声明

<declare-styleable name="AnimatedGif">
    <attr name="gifres" format="integer" />
</declare-styleable>

并在构造函数内部,您可以像

一样加载它
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AnimatedGif);
int value = a.getInt(R.styleable.AnimatedGif_gifres, 0)); 
stream = context.getResources().openRawResource(value);
a.recycle();

答案 1 :(得分:0)

我怎样才能使im显示gifImageView?

因为activity_main.xml是要使用代码添加自定义ImageView的Activity的布局:

1。使用LinearLayout中的activity_main.xml作为根布局并将orientation设置为vertical

2。将ID分配给activity_main.xml的根布局,如:

     android:id="@+id/main_layout"

3。onCreate方法中获取根布局:

     LinearLayout linearLayout = (LinearLayout)findViewById(R.id.main_layout);

4. 现在将gifImageView视图对象添加到linearLayout:

     linearLayout.addView(gifImageView);