点击图片变暗 滤镜效果


package com.bst.kpw.view.widget;

import android.content.Context;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ImageView;

/**
* @ClassName: FilterImageView
* @Description:  点击时显示明暗变化(滤镜效果)的ImageView
* @author LinJ
* @date 2015-1-6 下午2:13:46
*
*/
public class FilterImageView extends ImageView implements GestureDetector.OnGestureListener{

   /**   监听手势*/
   private GestureDetector mGestureDetector;
   public FilterImageView(Context context, AttributeSet attrs) {
       super(context, attrs);
       mGestureDetector=new GestureDetector(context, this);
   }


   @Override
   public boolean onTouchEvent(MotionEvent event) {
       //在cancel里将滤镜取消,注意不要捕获cacncel事件,mGestureDetector里有对cancel的捕获操作
       //在滑动GridView时,AbsListView会拦截掉Move和UP事件,直接给子控件返回Cancel
       if(event.getActionMasked()== MotionEvent.ACTION_CANCEL || event.getActionMasked() == MotionEvent.ACTION_UP){
           removeFilter();
       }
       return mGestureDetector.onTouchEvent(event);
   }

   /**
    *   设置滤镜
    */
   private void setFilter() {
       //先获取设置的src图片
       Drawable drawable=getDrawable();
       //当src图片为Null,获取背景图片
       if (drawable==null) {
           drawable=getBackground();
       }
       if(drawable!=null){
           //设置滤镜
           drawable.setColorFilter(Color.GRAY,PorterDuff.Mode.MULTIPLY);;
       }
   }
   /**
    *   清除滤镜
    */
   private void removeFilter() {
       //先获取设置的src图片
       Drawable drawable=getDrawable();
       //当src图片为Null,获取背景图片
       if (drawable==null) {
           drawable=getBackground();
       }
       if(drawable!=null){
           //清除滤镜
           drawable.clearColorFilter();
       }
   }

   @Override
   public boolean onDown(MotionEvent e) {
       setFilter();
       //这里必须返回true,表示捕获本次touch事件
       return true;
   }

   @Override
   public void onShowPress(MotionEvent e) {
       // TODO Auto-generated method stub

   }

   @Override
   public boolean onSingleTapUp(MotionEvent e) {
       removeFilter();
       performClick();
       return false;
   }

   @Override
   public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
                           float distanceY) {
       // TODO Auto-generated method stub
       return false;
   }

   @Override
   public void onLongPress(MotionEvent e) {
       //长安时,手动触发长安事件
       performLongClick();
   }

   @Override
   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                          float velocityY) {
       // TODO Auto-generated method stub
       return false;
   }
}


转载于:https://my.oschina.net/u/1177694/blog/637197

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值