码迷,mamicode.com
首页 > 其他好文 > 详细

ImageView之tint属性

时间:2015-01-20 10:28:52      阅读:576      评论:0      收藏:0      [点我收藏+]

标签:androidtint

昨天偶尔看到imageview的这个属性,觉得挺好的一个属性,我怎么现在才注意到这个呢?这个属性的作用是改变imageview中作为src的图片的颜色,在布局文件中是android:tint,在代码中对应的设置方法是imageview.setColorFilter(Color),从方法名中就可以看出就是给imageview添加一层遮罩。

看看效果图:

原始界面

技术分享

点击按钮之后

技术分享

再次点击

技术分享

上代码:

新建一个项目TintDemo

布局文件fragment_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.tintdemo.MainActivity$PlaceholderFragment" >

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Tint演示" />

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:contentDescription="演示"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>
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属性,也可以在布局文件中实现,很简单,代码如下

<ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:contentDescription="演示"
        android:src="@drawable/ic_launcher"
        android:tint="@android:color/darker_gray" />
相比原始的布局文件就多了一句代码

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属性

标签:androidtint

原文地址:http://blog.csdn.net/qmln31821007/article/details/42913557

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!