android 自定义ImageView -图片显示相关1
2017-01-13 17:54
211 查看
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Matrix;
import
android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import
android.util.Log;
import android.widget.ImageView;
import
android.view.ViewTreeObserver;
import
com.tancheng.laikanxing.util.MethodUtils;
/**
* 根据显示图片的宽高,控件的宽高,决定显示图片的某一个部分,比如, 竖长图上半部分,横长图左半部分
*
* @author
Chris Arriola
*/
public class MatrixImageViewextends ImageView {
public TopCropImageView(Contextcontext) {
super(context);
}
public TopCropImageView(Contextcontext, AttributeSetattrs) {
super(context,attrs);
}
public TopCropImageView(Contextcontext, AttributeSetattrs,
int defStyle) {
super(context,attrs,defStyle);
}
@Override
protectedvoid onLayout(booleanchanged,int
left,inttop,intright,
int
bottom) {
super.onLayout(changed,left,top,
right,bottom);
}
@Override
public
void setImageMatrix(Matrix matrix) {
super.setImageMatrix(matrix);
changeMatirx(null);
}
//
@Override
protectedboolean setFrame(intl,intt,intr,intb)
{
boolean
result = super.setFrame(l,t,r,
b);
changeMatirx(null);
returnresult;//super.setFrame(l, t, r, b);
}
@Override
public
void setImageDrawable(Drawable drawable) {
super.setImageDrawable(drawable);
changeMatirx(drawable);
}
@Override
public
void setImageResource(int
resId) {
//
TODO Auto-generated method stub
super.setImageResource(resId);
changeMatirx(getDrawable());
}
@Override
public
void setImageURI(Uri uri) {
//
TODO Auto-generated method stub
super.setImageURI(uri);
changeMatirx(getDrawable());
}
//
privateintdrawableWidth;
privateintdrawableHeight;
private
void changeMatirx(Drawable drawable) {
if (drawable ==null) {
drawable = getDrawable();
if (drawable ==null) {
return;
}
}
drawableWidth =drawable.getIntrinsicWidth();
drawableHeight =drawable.getIntrinsicHeight();
if (drawableWidth <= 0 ||drawableHeight <= 0) {
return;
}
if (drawableHeight >drawableWidth) {
setScaleType(ScaleType.MATRIX);
} else {
setScaleType(ScaleType.CENTER_CROP);
}
}
@Override
public
void setScaleType(ScaleType scaleType) {
changeMatrix(scaleType);
super.setScaleType(scaleType);
}
@Override
protectedvoid onDraw(Canvascanvas) {
super.onDraw(canvas);
}
private
void changeMatrix(ScaleType scaleType) {
if (scaleType == ScaleType.MATRIX) {
final Matrixmatrix = getImageMatrix();
final
int viewWidth = getWidth() - getPaddingLeft()
- getPaddingRight();
final
int viewHeight = getHeight() - getPaddingTop()
- getPaddingBottom();
if (viewHeight <= 0 ||viewWidth <= 0) {
return;
}
float
scale = 0f;
if (drawableWidth *viewHeight
>viewWidth *drawableHeight) {
scale = (float)viewHeight / (float)drawableHeight;
} else {
scale = (float)viewWidth / (float)drawableWidth;
}
scale = (float)viewWidth / (float)drawableWidth;
matrix.setScale(scale,scale);
super.setImageMatrix(matrix);
}
}
}
import android.graphics.Canvas;
import android.graphics.Matrix;
import
android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import
android.util.Log;
import android.widget.ImageView;
import
android.view.ViewTreeObserver;
import
com.tancheng.laikanxing.util.MethodUtils;
/**
* 根据显示图片的宽高,控件的宽高,决定显示图片的某一个部分,比如, 竖长图上半部分,横长图左半部分
*
* @author
Chris Arriola
*/
public class MatrixImageViewextends ImageView {
public TopCropImageView(Contextcontext) {
super(context);
}
public TopCropImageView(Contextcontext, AttributeSetattrs) {
super(context,attrs);
}
public TopCropImageView(Contextcontext, AttributeSetattrs,
int defStyle) {
super(context,attrs,defStyle);
}
@Override
protectedvoid onLayout(booleanchanged,int
left,inttop,intright,
int
bottom) {
super.onLayout(changed,left,top,
right,bottom);
}
@Override
public
void setImageMatrix(Matrix matrix) {
super.setImageMatrix(matrix);
changeMatirx(null);
}
//
@Override
protectedboolean setFrame(intl,intt,intr,intb)
{
boolean
result = super.setFrame(l,t,r,
b);
changeMatirx(null);
returnresult;//super.setFrame(l, t, r, b);
}
@Override
public
void setImageDrawable(Drawable drawable) {
super.setImageDrawable(drawable);
changeMatirx(drawable);
}
@Override
public
void setImageResource(int
resId) {
//
TODO Auto-generated method stub
super.setImageResource(resId);
changeMatirx(getDrawable());
}
@Override
public
void setImageURI(Uri uri) {
//
TODO Auto-generated method stub
super.setImageURI(uri);
changeMatirx(getDrawable());
}
//
privateintdrawableWidth;
privateintdrawableHeight;
private
void changeMatirx(Drawable drawable) {
if (drawable ==null) {
drawable = getDrawable();
if (drawable ==null) {
return;
}
}
drawableWidth =drawable.getIntrinsicWidth();
drawableHeight =drawable.getIntrinsicHeight();
if (drawableWidth <= 0 ||drawableHeight <= 0) {
return;
}
if (drawableHeight >drawableWidth) {
setScaleType(ScaleType.MATRIX);
} else {
setScaleType(ScaleType.CENTER_CROP);
}
}
@Override
public
void setScaleType(ScaleType scaleType) {
changeMatrix(scaleType);
super.setScaleType(scaleType);
}
@Override
protectedvoid onDraw(Canvascanvas) {
super.onDraw(canvas);
}
private
void changeMatrix(ScaleType scaleType) {
if (scaleType == ScaleType.MATRIX) {
final Matrixmatrix = getImageMatrix();
final
int viewWidth = getWidth() - getPaddingLeft()
- getPaddingRight();
final
int viewHeight = getHeight() - getPaddingTop()
- getPaddingBottom();
if (viewHeight <= 0 ||viewWidth <= 0) {
return;
}
float
scale = 0f;
if (drawableWidth *viewHeight
>viewWidth *drawableHeight) {
scale = (float)viewHeight / (float)drawableHeight;
} else {
scale = (float)viewWidth / (float)drawableWidth;
}
scale = (float)viewWidth / (float)drawableWidth;
matrix.setScale(scale,scale);
super.setImageMatrix(matrix);
}
}
}
相关文章推荐
- Android可以动态控制图片显示区域的自定义ImageView
- Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
- Android:自定义imageview实现两条线裁剪图片,不在区域内显示阴影
- android选择相册图片另存为并在Imageview中显示的相关问题
- Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
- 【Android自定义View实战】之仿去哪儿网App图片按压显示指纹并缩放效果TouchFingerImageView
- android:自定义imageview,可显示网络图片
- android 自定义ImageView显示圆形图片
- Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
- Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用
- android用ImageView显示网络图片
- android ImageView 视屏幕情况 使图片在限定范围内进行缩放显示
- 举例说明android中Bitmap、ListView以及ImageView的综合使用---显示图片并获取图片的宽和高
- Android用ImageView显示本地和网上的图片
- Android用ImageView显示本地和网上的图片
- Android应用中在ImageView中显示SD卡上的图片
- android ImageView 异步下载显示图片
- Android手机开发:ImageView使用和从内存读取图片显示
- Android用ImageView显示本地和网上的图片
- Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用