Android基礎入門教程——8.3.11 Paint API之—— ColorFilter(顏色過濾器)(3-3)

  


本節引言:

嗯,本來說好今天不寫的,還是寫吧,畢竟難得空閑哈~,本節給大傢帶來的是
ColorFilter的第三個子類:PorterDuffColorFilter,看到PorterDuff大傢一定不會
陌生吧,假如你看過前面的
Android基礎入門教程——8.3.5 Paint API之—— Xfermode與PorterDuff詳解(二)
其實效果都是一樣的,隻是這裡用的是顏色,而且直接設置就好,下面我們來寫個簡單的
例子,我們取6種不同的顏色,對18種模式進行測試!
官方API文檔:PorterDuffColorFilter
我們可以看到關鍵也是在於他的構造方法:

title=

前面是顏色,後面是模式~,來來來,寫例子:


1.測試代碼示例:

運行效果圖

title=

代碼實現

這裡的話我們用一個GridView來裝他們,我們先來寫下每個item的佈局:view_item.xml




    

    

    

接著我們編寫一個POJO業務類:Data.java

/**
 * Created by Jay on 2015/10/29 0029.
 */
public class Data {
    private int color;
    private PorterDuff.Mode mode;

    public Data() {
    }

    public Data(int color, PorterDuff.Mode mode) {
        this.color = color;
        this.mode = mode;
    }

    public int getColor() {
        return color;
    }

    public PorterDuff.Mode getMode() {
        return mode;
    }

    public void setColor(int color) {
        this.color = color;
    }

    public void setMode(PorterDuff.Mode mode) {
        this.mode = mode;
    }
}

至於Adapter類的話我們用回以前寫的可復用的自定義BaseAdapter類,這裡就不貼瞭,不過要加
多個方法:

        /**
         * 設置ColorFilter
         * */
        public ViewHolder setColorFilter(int id,int color,PorterDuff.Mode mode){
            View view = getView(id);
            if (view instanceof ImageView) {
                ((ImageView) view).setColorFilter(color,mode);
            }
            return this;
        }

接著是我們的主佈局文件:activity_main.xml



    

最後是我們的MainActivity.java類,填充數據,設置Adapter,非常簡單:

public class MainActivity extends AppCompatActivity {

    private GridView gd_show;
    private ArrayList items = null;
    private MyAdapter myAdapter = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gd_show = (GridView) findViewById(R.id.gd_show);

        //填充數據,遍歷Mode模式:
        items = new ArrayList();
        for (PorterDuff.Mode mode : PorterDuff.Mode.class.getEnumConstants()) {
            items.add(new Data(0x77E50961, mode));
            items.add(new Data(0xFFE50961, mode));
            items.add(new Data(0x77FFFFFF, mode));
            items.add(new Data(0xFFFFFFFF, mode));
            items.add(new Data(0x77000000, mode));
            items.add(new Data(0xFF000000, mode));
        }
        myAdapter = new MyAdapter(items, R.layout.view_item) {
            @Override
            public void bindView(ViewHolder holder, Data obj) {
                holder.setColorFilter(R.id.img_show, obj.getColor(), obj.getMode());
                holder.setText(R.id.tv_color, String.format(%08X, obj.getColor()));
                holder.setText(R.id.tv_mode, obj.getMode().toString());
            }
        };
        gd_show.setAdapter(myAdapter);
    }
}

上面的動圖可能太快,有時讀者相查下,這裡分開圖截,因為沒找到好用的截全屏工具,
所以這裡隻能分段截…

title= title=

title= title=


 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *