點擊圖片變暗 濾鏡效果


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);
   }java


   @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;
   }
}android

相關文章
相關標籤/搜索