ImageView

Posted winfredzen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageView相关的知识,希望对你有一定的参考价值。

ImageView

ImageView

Displays image resources, for example Bitmap or Drawable resources. ImageView is also commonly used to apply tints to an image and handle 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

旋转图片,需要指定旋转点,通过setPivotXsetPivotY指定

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的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ImageView 通过增加边距顶部尺寸变小?

获取 ListView 适配器内 ImageView 的尺寸

Wrap Content ImageView 显示全尺寸图片

如何为不同的屏幕尺寸android studio自动调整imageview的大小?

将 Button 放置在具有不同屏幕尺寸的 ImageView 之上

关于ImageView小于图片尺寸时会显示模糊现象