android imageview自定义,Android ImageView属性

ImageView 继承自View组件,主要功能是用于显示图片,实际上它不仅仅可以用来显示图片,任何Drawable对象都可以使用ImageView来显示。ImageView可以适用于任何布局中,并且Android为其提供了缩放和着色的一些操作。

1. foreground、src 和 background 属性区别

1)background指的是背景,foreground指的是前景,而src指的是内容;三者可以同时使用;

2)src填入图片时,是按照图片大小直接填充,并不会进行拉伸;而使用background和foreground填入图片,则是会根据ImageView给定的宽度来进行拉伸;

3)background和foreground是所有view都有的属性,总是缩放到view的大小,不受scaleType影响;而src是ImageView特有属性,它会受到scaleType的影响。

举个栗子:

android:layout_width="260dp"

android:layout_height="260dp"

android:foreground="#99000000"

android:background="#ff0000"

android:src="@mipmap/ic_launcher"/>

效果图:

7d713775df9f

前背景效果图

从图上可以看出,虽然foreground和src都为前景,但是foreground却在src之上。从层级上比较:foreground>src>background

2. adjustViewBounds属性用法

ImageView为我们提供了adjustViewBounds属性,用于设置缩放时是否保持原图长宽比。 adjustViewBounds详细介绍,请移驾 —— 《Android辟谣篇 —— ImageView宽高自适应》

3. 设置透明度

ImageView 设置透明度主要有以下几种方法:

android:alpha // 0f~1f

setAlpha(float alpha); // 0f~1f

setAlpha(int alpha); // 0~255,已过时

setImageAlpha(int alpha); // API>=16

4. 设置图片方式

1)设置前景

foreground

xml布局中:

android:foreground="@color/blue"

android:foreground="@mipmap/ic_launcher"

android:src="@mipmap/ic_launcher"

Java代码中:

// 设置前景图

image.setForeground(getResources().getDrawable(R.mipmap.ic_launcher));

// 设置前景色

image.setForeground(getResources().getDrawable(R.color.blue));

注意:

关于设置foreground无效问题,View源码片段:

case R.styleable.View_foreground:

if (targetSdkVersion >= VERSION_CODES.M || this instanceof FrameLayout) {

setForeground(a.getDrawable(attr));

}

break;

foreground属性只有在以下两种情况下生效:

(1) Android M版本(6.0)及以上 ;

(2) FrameLayout本身及其子类。

src

xml布局中:

android:src="@mipmap/ic_launcher"

Java代码中:

// 1. setImageDrawable(Drawable drawable)

image.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher)); //不会变形

// 2. setImageBitmap(Bitmap bm)

Stringpath=Environment.getExternalStorageDirectory()+File.separator+”test.jpg”;

Bitmap bm = BitmapFactory.decodeFile(path);

image.setImageBitmap(bm);//不会变形

// 3. setImageResource(int resId)

image.setImageResource(R.drawable.ic_launcher);//不会变形

2)设置背景

xml布局中:

android:background="@mipmap/ic_launcher"

android:background="@color/blue"

Java代码中:

// 1. setBackground(Drawable background)

image.setBackground(getResources().getDrawable(R.drawable.ic_launcher));//变形

// 2. setBackgroundResource(int resid)

image.setBackgroundResource(R.drawable.ic_launcher);//变形

// 3. setBackgroundDrawable(Drawable background)

image.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher));//变形

// setBackgroundColor(int color)

image.setBackgroundColor(getResources().getColor(R.color.blue));

5. ScaleType属性

android:scaleType用于设置显示的图片如何缩放或者移动以适应ImageView的大小,Java代码中可以通过imageView.setScaleType(ImageView.ScaleType.CENTER);来设置。 可选值如下:

MATRIX / matrix:用矩阵的方式绘制,从ImageView的左上角开始绘制原图,不缩放图片, 超过ImageView部分作裁剪处理;

CENTER / center:保持原图的大小,显示在ImageView的中心。当原图的尺寸大于ImageView的尺寸,超过部分裁剪处理;

CENTER_CROP / centerCrop:保持横纵比缩放图片,直到完全覆盖ImageView为止(指的是ImageView的宽和高都要填满),原图超过ImageView的部分作裁剪处理;

CENTER_INSIDE / centerInside:将图片的内容完整居中显示,通过按比例缩小原图尺寸的宽高等于或小于ImageView的宽高。如果原图的尺寸本身就小于ImageView的尺寸,则原图的尺寸不作任何处理,居中显示在ImageView;

FIT_XY / fitXY:把原图宽高进行不保持原比例放缩,直到填充满ImageView为止;

FIT_START / fitStart:把原图按比例放缩使之等于ImageView的宽高,缩放完成后将图片放在ImageView的左上角;

FIT_CENTER / fitCenter:把原图按比例放缩使之等于ImageView的宽高使之居中显示,缩放后放于中间;

FIT_END / fitEnd:把原图按比例放缩到ImageView的宽高,缩放完成后将图片放在ImageView的右下角。

7d713775df9f

ScaleType属性效果图

参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义实现信号格5格,可以按照以下步骤进行: 1. 在布局文件中添加一个 View,作为信号格的容器。 2. 在代码中动态添加 5 个 ImageView,分别表示信号强度的 5 个等级。 3. 根据不同的信号强度,设置不同的 ImageView 显示的图标和大小。 示例代码如下: ```java public class SignalStrengthView extends LinearLayout { private Context mContext; private ImageView[] mSignalViews; public SignalStrengthView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; init(); } private void init() { setOrientation(HORIZONTAL); mSignalViews = new ImageView[5]; for (int i = 0; i < 5; i++) { mSignalViews[i] = new ImageView(mContext); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(0, 0, 10, 0); mSignalViews[i].setLayoutParams(lp); addView(mSignalViews[i]); } } public void setSignalStrength(int strength) { int[] images = { R.drawable.ic_signal_strength_0, R.drawable.ic_signal_strength_1, R.drawable.ic_signal_strength_2, R.drawable.ic_signal_strength_3, R.drawable.ic_signal_strength_4 }; int[] widths = { 16, 32, 48, 64, 80 }; int[] heights = { 16, 32, 48, 64, 80 }; for (int i = 0; i < 5; i++) { if (strength >= i + 1) { mSignalViews[i].setImageResource(images[i]); mSignalViews[i].getLayoutParams().width = dp2px(widths[i]); mSignalViews[i].getLayoutParams().height = dp2px(heights[i]); } else { mSignalViews[i].setImageDrawable(null); } } } private int dp2px(int dp) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, mContext.getResources().getDisplayMetrics()); } } ``` 在上述代码中,我们定义了一个 `SignalStrengthView` 类,继承自 LinearLayout,用于显示信号格的容器。 在 `init()` 方法中,我们动态添加 5 个 ImageView,作为信号强度的 5 个等级。 在 `setSignalStrength()` 方法中,我们根据不同的信号强度,设置不同的 ImageView 显示的图标和大小。 最后,我们将 `SignalStrengthView` 添加到布局文件中,通过调用 `setSignalStrength()` 方法来设置信号强度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值