dockBar焦点问题 imageView实现闪烁效果

imageView实现闪烁效果

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/dock_left_focused" android:state_pressed="true"/>
    <item android:drawable="@drawable/dock_left_focused" android:state_focused="true"/>
    <item android:drawable="@drawable/dock_left_focused" android:state_selected="true"/>
    <item android:drawable="@drawable/dock_left_normal"/>

</selector>

    <ImageView
        android:id="@+id/dock_left"
        style="@style/DockArrow"
        android:src="@drawable/dock_left"
        android:focusable="false" />


使用这个方法mRightArrow.setPressed(true); mRightArrow.setPressed(false); 闪烁。


回掉,延时


public class DockBar extends LinearLayout implements View.OnClickListener,
        PagedGrid.PageListener, PagedGrid.PagedCaller {

    private static final int SHOW_NEXT_PAGE = 1;
    private static final int SHOW_PRE_PAGE = 2;
    private static final int DELY_TIME = 150;

    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case SHOW_NEXT_PAGE:
                mRightArrow.setPressed(false);
                mGrid.showNextPage();
//一起做动作,图片闪和翻页动作一致
                break;
            case SHOW_PRE_PAGE:
                mLeftArrow.setPressed(false);
                mGrid.showPrePage();

                break;
            }
        }

    };


    protected void onFinishInflate() {
        super.onFinishInflate();
        mLeftArrow = (ImageView) findViewById(R.id.dock_left);
        mRightArrow = (ImageView) findViewById(R.id.dock_right);
        mGrid = (PagedGrid) findViewById(R.id.dock_grid);
        if (mLeftArrow == null || mRightArrow == null || mGrid == null) {
            throw new InflateException("do you miss some widgets in DockBar?");
        }

        mLeftArrow.setOnClickListener(this);
        mRightArrow.setOnClickListener(this);
        mGrid.setPageListener(this);
        mGrid.setPagedCaller(this);
    }

    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_UP) {
            return super.dispatchKeyEvent(event);
        }
        if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) {
            if (mGrid.showPage(false, false)) {
                return true;
            }
        } else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
            if (mGrid.showPage(true, false)) {
                return true;
            }
        }
        return super.dispatchKeyEvent(event);
    }


    public void RightDown() {
        mRightArrow.setPressed(true);
        if (!mHandler.hasMessages(SHOW_NEXT_PAGE)) {
            mHandler.sendEmptyMessageDelayed(SHOW_NEXT_PAGE, DELY_TIME);
        }
    }

    public void LeftDown() {
        mLeftArrow.setPressed(true);
        if (!mHandler.hasMessages(SHOW_PRE_PAGE)) {
            mHandler.sendEmptyMessageDelayed(SHOW_PRE_PAGE, DELY_TIME);
        }

    }



public class PagedGrid extends CustomGrid implements OnItemClickListener,
        OnItemLongClickListener {


    public interface PagedCaller {
        public void RightDown();

        public void LeftDown();
    }

public boolean showPage(boolean next, boolean force) {
        if (!mNeedPaging) {
            LogUtil.i("can not invoke showPage(), no support.");
            return false;
        }
        if (force) {
            showPage(next ? mCurrentPageNum + 1 : mCurrentPageNum - 1);
            return false;
        }
        int currPosition = getSelectedItemPosition();
        if (next) {
            if (currPosition == DEFAULT_COLUMN - 1) {
                mPagedCaller.RightDown();
                return true;
            } else if (currPosition == getLastVisiblePosition()) {
                return true;
            }
        } else {
            if (currPosition == 0) {
                if (mCurrentPageNum == 0) {
                    return true;
                }
                mPagedCaller.LeftDown();
                return true;
            }
        }
        return false;
    }

    public void showNextPage() {
        showPage(mCurrentPageNum + 1);
        this.setSelection(0);
    }

    public void showPrePage() {
        showPage(mCurrentPageNum - 1);
        this.setSelection(DEFAULT_COLUMN - 1);
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值