17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/* 27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License. 67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at 77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and 147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License. 157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpackage com.android.inputmethod.pinyin; 187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport com.android.inputmethod.pinyin.PinyinIME.DecodingInfo; 207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.content.Context; 227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.util.AttributeSet; 237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.GestureDetector; 247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.MotionEvent; 257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.View; 267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.View.OnTouchListener; 277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.animation.AlphaAnimation; 287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.animation.Animation; 297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.animation.AnimationSet; 307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.animation.TranslateAnimation; 317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.animation.Animation.AnimationListener; 327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.widget.ImageButton; 337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.widget.RelativeLayout; 347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.widget.ViewFlipper; 357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectinterface ArrowUpdater { 377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project void updateArrowStatus(); 387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} 397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/** 427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Container used to host the two candidate views. When user drags on candidate 437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * view, animation is used to dismiss the current candidate view and show a new 447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * one. These two candidate views and their parent are hosted by this container. 457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * <p> 467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Besides the candidate views, there are two arrow views to show the page 477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * forward/backward arrows. 487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * </p> 497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpublic class CandidatesContainer extends RelativeLayout implements 517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project OnTouchListener, AnimationListener, ArrowUpdater { 527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Alpha value to show an enabled arrow. 547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private static int ARROW_ALPHA_ENABLED = 0xff; 567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Alpha value to show an disabled arrow. 597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private static int ARROW_ALPHA_DISABLED = 0x40; 617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation time to show a new candidate view and dismiss the old one. 647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private static int ANIMATION_TIME = 200; 667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Listener used to notify IME that user clicks a candidate, or navigate 697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * between them. 707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private CandidateViewListener mCvListener; 727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * The left arrow button used to show previous page. 757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private ImageButton mLeftArrowBtn; 777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * The right arrow button used to show next page. 807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private ImageButton mRightArrowBtn; 827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Decoding result to show. 857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private DecodingInfo mDecInfo; 877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * The animation view used to show candidates. It contains two views. 907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Normally, the candidates are shown one of them. When user navigates to 917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * another page, animation effect will be performed. 927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private ViewFlipper mFlipper; 947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * The x offset of the flipper in this container. 977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private int xOffsetForFlipper; 997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation used by the incoming view when the user navigates to a left 1027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * page. 1037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mInAnimPushLeft; 1057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation used by the incoming view when the user navigates to a right 1087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * page. 1097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mInAnimPushRight; 1117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation used by the incoming view when the user navigates to a page 1147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * above. If the page navigation is triggered by DOWN key, this animation is 1157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * used. 1167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mInAnimPushUp; 1187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation used by the incoming view when the user navigates to a page 1217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * below. If the page navigation is triggered by UP key, this animation is 1227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * used. 1237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mInAnimPushDown; 1257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation used by the outgoing view when the user navigates to a left 1287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * page. 1297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mOutAnimPushLeft; 1317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation used by the outgoing view when the user navigates to a right 1347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * page. 1357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mOutAnimPushRight; 1377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation used by the outgoing view when the user navigates to a page 1407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * above. If the page navigation is triggered by DOWN key, this animation is 1417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * used. 1427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mOutAnimPushUp; 1447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation used by the incoming view when the user navigates to a page 1477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * below. If the page navigation is triggered by UP key, this animation is 1487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * used. 1497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mOutAnimPushDown; 1517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation object which is used for the incoming view currently. 1547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mInAnimInUse; 1567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Animation object which is used for the outgoing view currently. 1597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation mOutAnimInUse; 1617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Current page number in display. 1647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private int mCurrentPage = -1; 1667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public CandidatesContainer(Context context, AttributeSet attrs) { 1687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project super(context, attrs); 1697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void initialize(CandidateViewListener cvListener, 1727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project BalloonHint balloonHint, GestureDetector gestureDetector) { 1737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mCvListener = cvListener; 1747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mLeftArrowBtn = (ImageButton) findViewById(R.id.arrow_left_btn); 1767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mRightArrowBtn = (ImageButton) findViewById(R.id.arrow_right_btn); 1777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mLeftArrowBtn.setOnTouchListener(this); 1787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mRightArrowBtn.setOnTouchListener(this); 1797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mFlipper = (ViewFlipper) findViewById(R.id.candidate_flipper); 1817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mFlipper.setMeasureAllChildren(true); 1827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project invalidate(); 1847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project requestLayout(); 1857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project for (int i = 0; i < mFlipper.getChildCount(); i++) { 1877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getChildAt(i); 1887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.initialize(this, balloonHint, gestureDetector, mCvListener); 1897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void showCandidates(PinyinIME.DecodingInfo decInfo, 1937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project boolean enableActiveHighlight) { 1947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == decInfo) return; 1957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mDecInfo = decInfo; 1967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mCurrentPage = 0; 1977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (decInfo.isCandidatesListEmpty()) { 1997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project showArrow(mLeftArrowBtn, false); 2007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project showArrow(mRightArrowBtn, false); 2017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 2027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project showArrow(mLeftArrowBtn, true); 2037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project showArrow(mRightArrowBtn, true); 2047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project for (int i = 0; i < mFlipper.getChildCount(); i++) { 2077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getChildAt(i); 2087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.setDecodingInfo(mDecInfo); 2097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project stopAnimation(); 2117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getCurrentView(); 2137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.showPage(mCurrentPage, 0, enableActiveHighlight); 2147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project updateArrowStatus(); 2167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project invalidate(); 2177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int getCurrentPage() { 2207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return mCurrentPage; 2217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void enableActiveHighlight(boolean enableActiveHighlight) { 2247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getCurrentView(); 2257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.enableActiveHighlight(enableActiveHighlight); 2267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project invalidate(); 2277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project @Override 2307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 2317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project Environment env = Environment.getInstance(); 2327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int measuredWidth = env.getScreenWidth(); 2337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int measuredHeight = getPaddingTop(); 2347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project measuredHeight += env.getHeightForCandidates(); 2357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project widthMeasureSpec = MeasureSpec.makeMeasureSpec(measuredWidth, 2367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project MeasureSpec.EXACTLY); 2377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project heightMeasureSpec = MeasureSpec.makeMeasureSpec(measuredHeight, 2387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project MeasureSpec.EXACTLY); 2397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project super.onMeasure(widthMeasureSpec, heightMeasureSpec); 2407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null != mLeftArrowBtn) { 2427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project xOffsetForFlipper = mLeftArrowBtn.getMeasuredWidth(); 2437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean activeCurseBackward() { 2477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (mFlipper.isFlipping() || null == mDecInfo) { 2487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return false; 2497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getCurrentView(); 2527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (cv.activeCurseBackward()) { 2547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.invalidate(); 2557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 2567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 2577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return pageBackward(true, true); 2587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean activeCurseForward() { 2627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (mFlipper.isFlipping() || null == mDecInfo) { 2637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return false; 2647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getCurrentView(); 2677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (cv.activeCursorForward()) { 2697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.invalidate(); 2707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 2717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 2727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return pageForward(true, true); 2737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean pageBackward(boolean animLeftRight, 2777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project boolean enableActiveHighlight) { 2787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == mDecInfo) return false; 2797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (mFlipper.isFlipping() || 0 == mCurrentPage) return false; 2817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int child = mFlipper.getDisplayedChild(); 2837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int childNext = (child + 1) % 2; 2847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getChildAt(child); 2857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cvNext = (CandidateView) mFlipper.getChildAt(childNext); 2867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mCurrentPage--; 2887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int activeCandInPage = cv.getActiveCandiatePosInPage(); 2897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (animLeftRight) 2907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project activeCandInPage = mDecInfo.mPageStart.elementAt(mCurrentPage + 1) 2917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project - mDecInfo.mPageStart.elementAt(mCurrentPage) - 1; 2927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cvNext.showPage(mCurrentPage, activeCandInPage, enableActiveHighlight); 2947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project loadAnimation(animLeftRight, false); 2957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project startAnimation(); 2967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project updateArrowStatus(); 2987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 2997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean pageForward(boolean animLeftRight, 3027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project boolean enableActiveHighlight) { 3037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == mDecInfo) return false; 3047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (mFlipper.isFlipping() || !mDecInfo.preparePage(mCurrentPage + 1)) { 3067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return false; 3077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int child = mFlipper.getDisplayedChild(); 3107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int childNext = (child + 1) % 2; 3117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getChildAt(child); 3127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int activeCandInPage = cv.getActiveCandiatePosInPage(); 3137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.enableActiveHighlight(enableActiveHighlight); 3147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cvNext = (CandidateView) mFlipper.getChildAt(childNext); 3167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mCurrentPage++; 3177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (animLeftRight) activeCandInPage = 0; 3187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cvNext.showPage(mCurrentPage, activeCandInPage, enableActiveHighlight); 3207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project loadAnimation(animLeftRight, true); 3217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project startAnimation(); 3227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project updateArrowStatus(); 3247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 3257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int getActiveCandiatePos() { 3287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == mDecInfo) return -1; 3297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getCurrentView(); 3307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return cv.getActiveCandiatePosGlobal(); 3317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void updateArrowStatus() { 3347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (mCurrentPage < 0) return; 3357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project boolean forwardEnabled = mDecInfo.pageForwardable(mCurrentPage); 3367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project boolean backwardEnabled = mDecInfo.pageBackwardable(mCurrentPage); 3377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (backwardEnabled) { 3397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project enableArrow(mLeftArrowBtn, true); 3407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 3417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project enableArrow(mLeftArrowBtn, false); 3427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (forwardEnabled) { 3447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project enableArrow(mRightArrowBtn, true); 3457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 3467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project enableArrow(mRightArrowBtn, false); 3477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private void enableArrow(ImageButton arrowBtn, boolean enabled) { 3517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project arrowBtn.setEnabled(enabled); 3527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (enabled) 3537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project arrowBtn.setAlpha(ARROW_ALPHA_ENABLED); 3547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project else 3557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project arrowBtn.setAlpha(ARROW_ALPHA_DISABLED); 3567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private void showArrow(ImageButton arrowBtn, boolean show) { 3597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (show) 3607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project arrowBtn.setVisibility(View.VISIBLE); 3617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project else 3627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project arrowBtn.setVisibility(View.INVISIBLE); 3637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean onTouch(View v, MotionEvent event) { 3667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (event.getAction() == MotionEvent.ACTION_DOWN) { 3677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (v == mLeftArrowBtn) { 3687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mCvListener.onToRightGesture(); 3697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else if (v == mRightArrowBtn) { 3707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mCvListener.onToLeftGesture(); 3717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else if (event.getAction() == MotionEvent.ACTION_UP) { 3737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getCurrentView(); 3747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.enableActiveHighlight(true); 3757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return false; 3787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // The reason why we handle candiate view's touch events here is because 3817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // that the view under the focused view may get touch events instead of the 3827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // focused one. 3837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project @Override 3847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean onTouchEvent(MotionEvent event) { 3857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project event.offsetLocation(-xOffsetForFlipper, 0); 3867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getCurrentView(); 3877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.onTouchEventReal(event); 3887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 3897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void loadAnimation(boolean animLeftRight, boolean forward) { 3927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (animLeftRight) { 3937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (forward) { 3947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == mInAnimPushLeft) { 3957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimPushLeft = createAnimation(1.0f, 0, 0, 0, 0, 1.0f, 3967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project ANIMATION_TIME); 3977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mOutAnimPushLeft = createAnimation(0, -1.0f, 0, 0, 1.0f, 0, 3987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project ANIMATION_TIME); 3997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimInUse = mInAnimPushLeft; 4017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mOutAnimInUse = mOutAnimPushLeft; 4027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 4037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == mInAnimPushRight) { 4047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimPushRight = createAnimation(-1.0f, 0, 0, 0, 0, 1.0f, 4057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project ANIMATION_TIME); 4067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mOutAnimPushRight = createAnimation(0, 1.0f, 0, 0, 1.0f, 0, 4077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project ANIMATION_TIME); 4087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimInUse = mInAnimPushRight; 4107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mOutAnimInUse = mOutAnimPushRight; 4117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 4137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (forward) { 4147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == mInAnimPushUp) { 4157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimPushUp = createAnimation(0, 0, 1.0f, 0, 0, 1.0f, 4167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project ANIMATION_TIME); 4177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mOutAnimPushUp = createAnimation(0, 0, 0, -1.0f, 1.0f, 0, 4187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project ANIMATION_TIME); 4197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimInUse = mInAnimPushUp; 4217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mOutAnimInUse = mOutAnimPushUp; 4227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 4237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == mInAnimPushDown) { 4247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimPushDown = createAnimation(0, 0, -1.0f, 0, 0, 1.0f, 4257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project ANIMATION_TIME); 4267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mOutAnimPushDown = createAnimation(0, 0, 0, 1.0f, 1.0f, 0, 4277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project ANIMATION_TIME); 4287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimInUse = mInAnimPushDown; 4307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mOutAnimInUse = mOutAnimPushDown; 4317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 4347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mInAnimInUse.setAnimationListener(this); 4357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 4367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mFlipper.setInAnimation(mInAnimInUse); 4377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mFlipper.setOutAnimation(mOutAnimInUse); 4387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 4407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Animation createAnimation(float xFrom, float xTo, float yFrom, 4417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project float yTo, float alphaFrom, float alphaTo, long duration) { 4427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project AnimationSet animSet = new AnimationSet(getContext(), null); 4437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project Animation trans = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 4447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project xFrom, Animation.RELATIVE_TO_SELF, xTo, 4457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project Animation.RELATIVE_TO_SELF, yFrom, Animation.RELATIVE_TO_SELF, 4467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project yTo); 4477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project Animation alpha = new AlphaAnimation(alphaFrom, alphaTo); 4487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project animSet.addAnimation(trans); 4497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project animSet.addAnimation(alpha); 4507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project animSet.setDuration(duration); 4517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return animSet; 4527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 4547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private void startAnimation() { 4557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mFlipper.showNext(); 4567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 4587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private void stopAnimation() { 4597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mFlipper.stopFlipping(); 4607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 4627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void onAnimationEnd(Animation animation) { 4637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (!mLeftArrowBtn.isPressed() && !mRightArrowBtn.isPressed()) { 4647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CandidateView cv = (CandidateView) mFlipper.getCurrentView(); 4657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project cv.enableActiveHighlight(true); 4667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 4697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void onAnimationRepeat(Animation animation) { 4707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 4727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void onAnimationStart(Animation animation) { 4737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 4747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} 475