ImageView
Posted winfredzen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageView相关的知识,希望对你有一定的参考价值。
ImageView
Displays image resources, for example
Bitmap
orDrawable
resources. ImageView is also commonly used toapply tints to an image
andhandle image scaling
.
显示图像资源,例如位图或可绘制资源。 ImageView通常还用于将色调应用于图像并处理图像缩放
设置图片的方法:
- setImageDrawable(Drawable drawable)
- setImageBitmap(Bitmap bm)
- setImageResource(int resId)
- setImageURI(Uri uri)
例如,设置drawable,从一个resource中获取一个Drawable,可以使用getResources().getDrawable()
方法
Drawable myDrawable = getResources().getDrawable(R.drawable.scaletest);
ScaleType
ScaleType定义了ImageView如何显示image,默认为FIT_CENTER
- CENTER - 居中图片,没用缩放,图片的尺寸没有被改变
- CENTER_CROP - 缩放图片,保持图片的比率,直至图片的width或height与imageView的width或者height相同
- CENTER_INSIDE
- FIT_CENTER
- FIT_START
- FIT_END
- FIT_XY
- MATRIX
可参考文章:
如下的实例,图片大小为900x200的png
在各个ScaleType下的显示
旋转Image
旋转图片,需要指定旋转点,通过setPivotX
和setPivotY
指定
public class RotateActivity extends Activity
Button rotateButton;
ImageView imageView;
int numClicks = 1;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rotate);
imageView = (ImageView)findViewById(R.id.imageView);
rotateButton = (Button) findViewById(R.id.button);
rotateButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
imageView.setPivotX(imageView.getWidth()/2);
imageView.setPivotY(imageView.getHeight() / 2);
imageView.setRotation(30*numClicks);
numClicks++;
);
设置Alpha
alpha表示的是图片的透明度,可以通过setImageAlpha()
方法来设置
/**
* Sets the alpha value that should be applied to the image.
*
* @param alpha the alpha value that should be applied to the image (between
* 0 and 255 inclusive, with 0 being transparent and 255 being opaque)
*
* @see #getImageAlpha()
*/
@RemotableViewMethod
public void setImageAlpha(int alpha)
setAlpha(alpha);
- alpha - 为int型,0表示完全透明,255表示不透明
处理大图片
大型图片对对app的内存有很大的影响,如何处理呢?
使用BitmapFactory.Options
BitmapFactory.Options
类是BitmapFactory
对图片进行解码时使用的一个配置参数类
- inJustDecodeBounds - 设为true,那么BitmapFactory并不会真的返回一个Bitmap给你,它仅仅会把它的宽,高取回来给你,这样就不会占用太多的内存,也就不会那么频繁的发生OOM(out fo memory)
- outWidth outHeight - 图像的宽和高
- inSampleSize - 一个integer用来表示Bitmap的尺寸应该reduece多少。例如一个1000x400的图片,inSampleSize为4的话,最后的Bitmap为250X100
Display display = getWindowManager().getDefaultDisplay();
int displayWidth = display.getWidth();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.largeimage, options);
int width = options.outWidth;
if (width > displayWidth)
int widthRatio = Math.round((float) width / (float) displayWidth);
options.inSampleSize = widthRatio;
options.inJustDecodeBounds = false;
Bitmap scaledBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.largeimage, options);
imageView.setImageBitmap(scaledBitmap);
在Canvas上绘制
创建一个Bitmap,在Canvas上直接绘制
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_draw);
imageView = (ImageView) findViewById(R.id.imageView);
drawButton = (Button)findViewById(R.id.button);
drawButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Bitmap imageBitmap = Bitmap.createBitmap(imageView.getWidth(), imageView.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(imageBitmap);
float scale = getResources().getDisplayMetrics().density;
Paint p = new Paint();
p.setColor(Color.BLUE);
p.setTextSize(48*scale);
canvas.drawText("Hello", imageView.getWidth()/2,imageView.getHeight()/2, p);
imageView.setImageBitmap(imageBitmap);
);
以上是关于ImageView的主要内容,如果未能解决你的问题,请参考以下文章
获取 ListView 适配器内 ImageView 的尺寸
Wrap Content ImageView 显示全尺寸图片
如何为不同的屏幕尺寸android studio自动调整imageview的大小?