android view增加點擊效果,如:iReader書架書籍點擊變暗

    Android開發中,View的圖片是動態生成的,我們需要增加點擊效果。像iReader 的書架中的書籍,點擊變暗。


使用很簡單:

    ImageView iv = (ImageView) this.findViewById(R.id.image_view1);

    Drawable d = Drawable.createFromPath("picPath");

        StateListDrawable sld = createSLD(this, d);
        iv.setImageDrawable(sld);


///增加如下兩個方法:

public Drawable createDrawable(Drawable d, Paint p) {

        BitmapDrawable bd = (BitmapDrawable) d;
        Bitmap b = bd.getBitmap();
        Bitmap bitmap = Bitmap.createBitmap(bd.getIntrinsicWidth(),
                bd.getIntrinsicHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(b, 0, 0, p); // 關鍵代碼,使用新的Paint畫原圖,

        return new BitmapDrawable(bitmap);
    }


    /** 設置Selector。 本次只增加點擊變暗的效果,註釋的代碼爲更多的效果*/ 
    public StateListDrawable createSLD(Context context, Drawable drawable) {
        StateListDrawable bg = new StateListDrawable();
        Paint p = new Paint();
        p.setColor(0x40222222); //Paint ARGB色值,A = 0x40 不透明。RGB222222 暗色


        Drawable normal = drawable;
        Drawable pressed = createDrawable(drawable, p);
        // p = new Paint();
        // p.setColor(0x8000FF00);
        // Drawable focused = createDrawable(drawable, p);
        // p = new Paint();
        // p.setColor(0x800000FF);
        // Drawable unable = createDrawable(drawable, p);
        // View.PRESSED_ENABLED_STATE_SET
        bg.addState(new int[] { android.R.attr.state_pressed,
                android.R.attr.state_enabled }, pressed);
        // View.ENABLED_FOCUSED_STATE_SET
        // bg.addState(new int[] { android.R.attr.state_enabled,
        // android.R.attr.state_focused }, focused);
        // View.ENABLED_STATE_SET
        bg.addState(new int[] { android.R.attr.state_enabled }, normal);
        // View.FOCUSED_STATE_SET
        // bg.addState(new int[] { android.R.attr.state_focused }, focused);
        // // View.WINDOW_FOCUSED_STATE_SET
        // bg.addState(new int[] { android.R.attr.state_window_focused },
        // unable);
        // View.EMPTY_STATE_SET
        bg.addState(new int[] {}, normal);
        return bg;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章