package io.github.javiewer.view;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.os.Build;
import android.support.v4.widget.NestedScrollView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.widget.ImageView;
/**
* Project: JAViewer
*/
public class ViewUtil {
@SuppressWarnings("deprecation")
public static void alignIconToView(final View icon, final View view) {
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.MarginLayoutParams viewMargin = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
ViewGroup.MarginLayoutParams iconMargin = (ViewGroup.MarginLayoutParams) icon.getLayoutParams();
int topMargin = viewMargin.topMargin;
topMargin += (view.getMeasuredHeight() - icon.getMeasuredHeight()) / 2;
iconMargin.topMargin = topMargin;
icon.setLayoutParams(iconMargin);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
}
public static int dpToPx(int dp) {
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
public static int pxToDp(int px) {
return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}
public static void imageTopCrop(ImageView view) {
view.setScaleType(ImageView.ScaleType.MATRIX);
final Matrix matrix = view.getImageMatrix();
float scale;
final int viewWidth = view.getWidth() - view.getPaddingLeft() - view.getPaddingRight();
final int viewHeight = view.getHeight() - view.getPaddingTop() - view.getPaddingBottom();
final int drawableWidth = view.getDrawable().getIntrinsicWidth();
final int drawableHeight = view.getDrawable().getIntrinsicHeight();
if (drawableWidth * viewHeight > drawableHeight * viewWidth) {
scale = (float) viewHeight / (float) drawableHeight;
} else {
scale = (float) viewWidth / (float) drawableWidth;
}
matrix.setScale(scale, scale);
view.setImageMatrix(matrix);
}
public static Bitmap getBitmapByView(NestedScrollView scrollView) {
int h = 0;
Bitmap bitmap = null;
// 获取scrollview实际高度
for (int i = 0; i < scrollView.getChildCount(); i++) {
h += scrollView.getChildAt(i).getHeight();
scrollView.getChildAt(i).setBackgroundColor(
Color.parseColor("#ffffff"));
}
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
scrollView.draw(canvas);
return bitmap;
}
public static int getStatusBarHeight(Activity activity) {
Rect rectangle = new Rect();
Window window = activity.getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
return rectangle.top;
}
}