作者:10灬月 | 来源:互联网 | 2023-10-10 14:54
昨天偶尔看到imageview的这个属性,觉得挺好的一个属性,我怎么现在才注意到这个呢?这个属性的作用是改变imageview中作为src的图片的颜色,在布局文件中是android
昨天偶尔看到imageview的这个属性,觉得挺好的一个属性,我怎么现在才注意到这个呢?这个属性的作用是改变imageview中作为src的图片的颜色,在布局文件中是android:tint,在代码中对应的设置方法是imageview.setColorFilter(Color),从方法名中就可以看出就是给imageview添加一层遮罩。
看看效果图:
原始界面
点击按钮之后
再次点击
上代码:
新建一个项目TintDemo
布局文件fragment_main.xml
MainActivity
package com.example.tintdemo;
import android.app.Notification.Action;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends ActionBarActivity {
private Button btn;
private ImageView img;
private Type type;
enum Type {
DarkGray, NULL
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
type = Type.NULL;// 初始化img属性设置为空
init();
}
/**
* 初始化控件
*/
private void init() {
// TODO Auto-generated method stub
btn = (Button) findViewById(R.id.btn);
img = (ImageView) findViewById(R.id.img);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setFilter(type, img);
}
});
// 实现类似被背景选择器的功能
img.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
img.setColorFilter(Color.DKGRAY);
break;
case MotionEvent.ACTION_UP:
img.setColorFilter(null);
break;
}
return true;
}
});
}
private void setFilter(Type type, ImageView img) {
switch (type) {
case DarkGray:
this.type = Type.NULL;
img.setColorFilter(null);
break;
case NULL:
this.type = Type.DarkGray;
img.setColorFilter(Color.DKGRAY);
break;
}
}
}
上面写的代码是用代码实现tint属性,也可以在布局文件中实现,很简单,代码如下
相比原始的布局文件就多了一句代码
android:tint="@android:color/darker_gray"
这样的话在程序初始化的时候我们的图标颜色就是暗灰色了。
注意下面这一段代码,记得我们常用的背景选择器吗?很多时候我是用对一张原始图片作灰度值处理之后与原始图片一起制作一个背景选择器,现在不用了,只用tint就可以实现,这样的话就减小了应用程序的大小。
// 实现类似被背景选择器的功能
img.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
img.setColorFilter(Color.DKGRAY);
break;
case MotionEvent.ACTION_UP:
img.setColorFilter(null);
break;
}
return true;
}
});
我不会截取动态图,这个效果就不演示了,自己写一下试试吧?
源码下载
ImageView之tint属性