随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
WebView里面有一个静态内部类ExtendedZoomControls,其继承FrameLayout。它是对ZoomControls的扩展,它加载了一个布局文件com.android.internal.R.layout.zoom_magnify,布局文件源码如下:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<ZoomControls
android:id="@+id/zoomControls"
style="@style/ZoomControls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal" />
<ImageView
android:id="@+id/zoomMagnify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:focusable="true"
android:paddingEnd="2dip"
android:src="@drawable/btn_zoom_page" />
</merge>
此布局文件引用了一个style:ZoomControls:
<style name="ZoomControls">
<item name="android:gravity">bottom</item>
<item name="android:paddingStart">15dip</item>
<item name="android:paddingEnd">15dip</item>
</style>
所以此ExtendedZoomControls只是在ZoomControls基础上做了扩展。此控件对外提供了显示和隐藏以及设置监听的方法,源码如下:
private static class ExtendedZoomControls extends FrameLayout {
public ExtendedZoomControls(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(com.android.internal.R.layout.zoom_magnify, this, true);
mPlusMinusZoomControls = (ZoomControls) findViewById(
com.android.internal.R.id.zoomControls);
findViewById(com.android.internal.R.id.zoomMagnify).setVisibility(
View.GONE);
}
public void show(boolean showZoom, boolean canZoomOut) {
mPlusMinusZoomControls.setVisibility(
showZoom ? View.VISIBLE : View.GONE);
fade(View.VISIBLE, 0.0f, 1.0f);
}
public void hide() {
fade(View.GONE, 1.0f, 0.0f);
}
private void fade(int visibility, float startAlpha, float endAlpha) {
AlphaAnimation anim = new AlphaAnimation(startAlpha, endAlpha);
anim.setDuration(500);
startAnimation(anim);
setVisibility(visibility);
}
public boolean hasFocus() {
return mPlusMinusZoomControls.hasFocus();
}
public void setOnZoomInClickListener(OnClickListener listener) {
mPlusMinusZoomControls.setOnZoomInClickListener(listener);
}
public void setOnZoomOutClickListener(OnClickListener listener) {
mPlusMinusZoomControls.setOnZoomOutClickListener(listener);
}
ZoomControls mPlusMinusZoomControls;
}
提供的方法很容易看懂,就不多做解释。