0
我目前正在构建一个需要使用gif的android应用程序,并且 我有一个自定义GIFView
来显示动画gif。我想设置这个视图的大小,但用像素写下尺寸并不是很好,因为它在每个设备上都会发生很大的变化。所以我认为将它们都设置为wrap_content
可以解决这个问题,但事实并非如此。将layout_width
设置为wrap_content
时,一切正常,但将layout_height
设置为wrap_content
时,整个视图都会消失。我该如何解决这个问题?Android自定义GIFView调整大小?
这是GIFView
:
package XXX.XXX.XXX;
import java.io.InputStream;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Movie;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.View;
public class GIFView extends View {
private Movie movie;
private int gifId;
private long movieStart;
public GIFView(Context context) {
super(context);
initializeView();
}
public GIFView(Context context, AttributeSet attrs) {
super(context, attrs);
setAttrs(attrs);
initializeView();
}
public GIFView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setAttrs(attrs);
initializeView();
}
public void setGIFResource(int resId) {
this.gifId = resId;
initializeView();
}
public int getGIFResource() {
return this.gifId;
}
private void initializeView() {
if (gifId != 0) {
InputStream is = getContext().getResources().openRawResource(gifId);
movie = Movie.decodeStream(is);
movieStart = 0;
this.invalidate();
}
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
super.onDraw(canvas);
long now = android.os.SystemClock.uptimeMillis();
if (movieStart == 0) {
movieStart = now;
}
if (movie != null) {
int relTime = (int) ((now - movieStart) % movie.duration());
movie.setTime(relTime);
movie.draw(canvas, getWidth() - movie.width(), getHeight() - movie.height());
this.invalidate();
}
}
private void setAttrs(AttributeSet attrs) {
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.GIFView, 0, 0);
String gifSource = a.getString(R.styleable.GIFView_src);
//little workaround here. Who knows better approach on how to easily get resource id - please share
String sourceName = Uri.parse(gifSource).getLastPathSegment().replace(".gif", "");
setGIFResource(getResources().getIdentifier(sourceName, "drawable", getContext().getPackageName()));
a.recycle();
}
}
}
我的XML文件:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/course_title"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:padding="5dp"
android:background="#A47D42">
<XXX.XXX.XXX.GIFView
android:id="@+id/animation_1"
android:layout_width="240px"
android:layout_height="200px"
android:layout_gravity="center_horizontal"
app:src="@drawable/someanimation" >
</XXX.XXX.XXX.GIFView>
</LinearLayout>
谢谢:)
不好意思?我应该怎么做? – arielschon12 2013-03-23 16:48:02
试图做到 - 无论如何不工作.. – arielschon12 2013-03-23 17:55:57