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