【发布时间】:2014-10-28 10:03:18
【问题描述】:
我将 WebView 放在片段中以显示 gif 动画。这完美无缺。这是 WebView 类:
public class GifWebView extends View {
private Movie mMovie;
InputStream is;
long moviestart;
public GifWebView(Context context, String gifName) {
super(context);
Paint p = new Paint();
p.setAntiAlias(true);
setLayerType(LAYER_TYPE_SOFTWARE, p);
if(gifName.startsWith("acqua")){
is=context.getResources().openRawResource(R.drawable.water);
} else if(gifName.startsWith("aria")) {
is=context.getResources().openRawResource(R.drawable.air);
}
mMovie=Movie.decodeStream(is);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
super.onDraw(canvas);
long now=android.os.SystemClock.uptimeMillis();
//System.out.println("now="+now);
if (moviestart == 0) { // first time
moviestart = now;
}
//System.out.println("\tmoviestart="+moviestart);
int relTime = (int)((now - moviestart) % mMovie.duration()) ;
//System.out.println("time="+relTime+"\treltime="+movie.duration());
mMovie.setTime(relTime);
mMovie.draw(canvas,(float)this.getWidth()/(float) mMovie.width(),(float)this.getHeight()/(float) mMovie.height());
this.invalidate();
}
}
当我想停止 gif 动画并通过片段中的微调器选择将其更改为另一个 gif 时出现问题:
mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
int posit = parent.getSelectedItemPosition();
pertSpinner.setPopupBackgroundResource(R.color.white);
pertSpinner.setValConfirmed(true);
switch (posit) {
case 0 :
toplayout.removeAllViewsInLayout();
view = new GifWebView(getActivity(), "acqua");
toplayout.addView(view);
break;
case 1 :
toplayout.removeAllViewsInLayout();
view = new GifWebView(getActivity(), "aria");
toplayout.addView(view);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Another interface callback
}
});
这是我的 XML 布局,其中包含 gif 的 toplayout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.example.firacalc"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:id="@+id/fragment_container" >
... some buttons and the spinner...
<LinearLayout
android:id="@+id/toplayout"
android:layout_width="116dp"
android:layout_height="116dp"
android:layout_alignTop="@+id/btnInfo"
android:layout_marginLeft="27dp"
android:layout_toRightOf="@+id/btnInfo"
android:layout_alignRight="@+id/pert_spinner"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>
使用此代码,应用程序不会更改默认 GIF。 有没有一种方法可以通过微调器以编程方式设置新的 GIF? 任何帮助将不胜感激!!
【问题讨论】:
-
I put a WebView in a fragment但GifWebView extends View- 如果您的代码中有一个 WebView,它确实隐藏得很好。因为我看不到 WebView。 -
好吧..这是一个视图调用“GifWebView”..
标签: android view android-spinner animated-gif