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