android自定义适配屏幕的ImageView
16lz
2021-01-26
package org.angryfun.view;import android.content.Context;import android.graphics.Bitmap;import android.util.AttributeSet;import android.view.ViewGroup.LayoutParams;import android.widget.ImageView;public class FitImageView extends ImageView {private Bitmap mBitmap;private int mBitmapWidth;private int mBitmapHeight;private boolean mReady;private boolean mSetupPending;public FitImageView(Context context) {super(context);init();}public FitImageView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public FitImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}private void init() {mReady = true;if (mSetupPending) {setup();mSetupPending = false;}}private void reSize() {int width = getResources().getDisplayMetrics().widthPixels;int height = (int) (getResources().getDisplayMetrics().heightPixels * 0.8);int imgH = mBitmapHeight;int imgW = mBitmapWidth;int lastH = imgH;int lastW = imgW;double radio = 1.0;radio = (width * 1.0) / imgW;if (imgH * radio > height) {radio = (height * 1.0) / imgH;}lastH = (int) (radio * imgH);lastW = (int) (radio * imgW);LayoutParams lp = this.getLayoutParams();lp.width = lastW;lp.height = lastH;this.setLayoutParams(lp);}@Overridepublic void setImageBitmap(Bitmap bm) {super.setImageBitmap(bm);mBitmap = bm;setup();reSize();}private void setup() {if (!mReady) {mSetupPending = true;return;}if (mBitmap == null) {return;}mBitmapHeight = mBitmap.getHeight();mBitmapWidth = mBitmap.getWidth();invalidate();}}
从网络上下载后的图片加载在页面上按照ImageView自带的属性根本就设置不准确,所以自己重新封装了一个ImageView来实现屏幕自适配,其实原理就是重载 setImageBitmap函数,获得bitmap的宽度和高度然后根据手机屏幕大小自动调整ImageView控件的大小
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:scaleType="fitXY"
android:layout_centerHorizontal="true" />
更多相关文章
- Android常用控件之RecyclerView
- 自定义ViewGroup onMeasure onLayout
- android:根据资源查找相应控件
- android gallery 画廊控件示例
- 自定义Android侧滑菜单控件
- 弹出NumberPicker窗口,修改字体大小
- 选择型控件
- android 获取控件宽度高度
- RadioGroup控件(接口类监听事件)