您的位置:首页 > 其它

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

2013-02-26 10:32 821 查看
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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: