{"id":236,"date":"2010-07-03T18:03:44","date_gmt":"2010-07-03T09:03:44","guid":{"rendered":"http:\/\/www.typea.info\/blog\/index.php\/2010\/07\/03\/androidx06ht_desire_4\/"},"modified":"2010-07-03T18:03:44","modified_gmt":"2010-07-03T09:03:44","slug":"androidx06ht_desire_4","status":"publish","type":"post","link":"https:\/\/www.typea.info\/blog\/index.php\/2010\/07\/03\/androidx06ht_desire_4\/","title":{"rendered":"Android(X06HT Desire) \u30da\u30fc\u30b8\u3092\u3081\u304f\u308b\u52d5\u4f5c\u3092\u5b9f\u88c5\u3057\u3066\u307f\u308b\u30b5\u30f3\u30d7\u30eb"},"content":{"rendered":"<p><iframe loading=\"lazy\" src=\"http:\/\/rcm-fe.amazon-adsystem.com\/e\/cm?t=typea09-22&#038;o=9&#038;p=13&#038;l=st1&#038;mode=books-jp&#038;search=Android&#038;fc1=000000&#038;lt1=_blank&#038;lc1=3366FF&#038;bg1=FFFFFF&#038;f=ifr\" marginwidth=\"0\" marginheight=\"0\" width=\"468\" height=\"60\" border=\"0\" frameborder=\"0\" style=\"border:none;\" scrolling=\"no\"><\/iframe><\/p>\n<p>\u3042\u306e\u9b45\u529b\u7684\u306a iPad \u306e\u672c\u306e\u30da\u30fc\u30b8\u3092\u3081\u304f\u308b\u69d8\u306a\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3002<\/p>\n<p>\u305d\u3053\u307e\u3067\u3068\u306f\u884c\u304b\u306a\u3044\u307e\u3067\u3082\u3001\u3061\u3087\u3063\u3068\u3057\u305f\u30da\u30fc\u30b8\u3092\u3081\u304f\u308b\u3088\u3046\u306a\u52d5\u304d\u306f\u3001\u3061\u3087\u3063\u3068\u3057\u305f\u8a2d\u5b9a\u3067\u3067\u304d\u308b\u3093\u3060\u308d\u3046Android\u3002\u4f4d\u306b\u601d\u3063\u3066\u3044\u305f\u304c\u3001\u305d\u3046\u3067\u3082\u306a\u3044\u611f\u3058\u3002<\/p>\n<p>\u3069\u3046\u3059\u308b\u306e\u304c\u5b9a\u77f3\u306a\u306e\u304b\u3061\u3068\u5206\u304b\u3089\u306a\u3044\u304c\u3001\u305d\u308c\u3063\u307d\u304f\u52d5\u304f\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u3001\u30e1\u30e2\u3057\u3066\u304a\u304f\u3002<\/p>\n<p> <object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/2FRuFcBuPWc&amp;hl=ja&amp;fs=1\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/2FRuFcBuPWc&amp;hl=ja&amp;fs=1\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"><\/embed><\/object>  <\/p>\n<h2>ViewFlipper \u3068\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u308b<\/h2>\n<p>ViewFlipper\u3063\u3066\u3044\u3046\u304f\u3089\u3044\u3060\u304b\u3089\u3001\u3053\u3044\u3064\u3092\u4f7f\u3048\u3070\u4e07\u4e8bOK\u3068\u601d\u3063\u3066\u3044\u305f\u3002<\/p>\n<p>\u78ba\u304b\u306b\u3001\u7c21\u5358\u306b\u3067\u304d\u308b\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u30bd\u30fc\u30b9\u306f\u30013\u3064\u306e\u5b9f\u88c5\u3092\u5207\u308a\u5206\u3051\u308b\u3088\u3046\u306a\u5f62\u5f0f\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u7121\u99c4\u306b\u9577\u3044\u304c\u3001\u3053\u306e\u5b9f\u88c5\u3092\u304a\u3053\u306a\u3063\u3066\u3044\u308b\u306e\u306f\u3001pageFlipWithSimpleAnimation() \u30e1\u30bd\u30c3\u30c9\u3002<\/p>\n<p>\u30da\u30fc\u30b8\u9077\u79fb\u306f\u3001ViewFlipper\u306b\u4efb\u305b\u3066\u3001\u52d5\u304d\u306f\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3067\u884c\u3046\u3002<\/p>\n<h3>\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u30b5\u30f3\u30d7\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u3068\u4f5c\u6210<\/h3>\n<p>\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3063\u3066\u6025\u306b\u8a00\u308f\u308c\u3066\u3082\u53d6\u3063\u3064\u304d\u306b\u304f\u3044\u304c\u3001\u30b5\u30f3\u30d7\u30eb\u304cSDK\u306b\u3042\u308b\u3002 \u81ea\u5206\u306e\u74b0\u5883\u3060\u3068\u3001\u4ee5\u4e0b<\/p>\n<pre>{android-sdk}\\samples\\android-7\\ApiDemos\\res\\anim<\/pre>\n<p>\u9069\u5b9c\u8aad\u307f\u66ff\u3048\u3066\u3002<\/p>\n<p>Eclipse \u304b\u3089\u3001\/res\/anim \u30d5\u30a9\u30eb\u30c0\u3092\u3064\u304f\u3063\u3066\u3001\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u4e0a\u8a18\u30d5\u30a9\u30eb\u30c0\u306e\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u5b9c\u30a4\u30f3\u30dd\u30fc\u30c8\u3002<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/AndroidX06HTDesire_F137\/android_anim01.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"android_anim01\" border=\"0\" alt=\"android_anim01\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/AndroidX06HTDesire_F137\/android_anim01_thumb.jpg\" width=\"231\" height=\"229\" \/><\/a> <\/p>\n<p>\u3053\u3053\u3067\u306f\u3001push_left_in.xml\u3001push_left_out.xml \u3092\u305d\u306e\u307e\u307e\u3001\u4f7f\u3046\u3002<\/p>\n<p>\u3053\u308c\u306f\u3001View \u3092 \u5de6\u306b\u5411\u3051\u3066 \u5165\u3063\u3066\u304f\u308b\u306e\u3068\u3001\u5de6\u306b\u5411\u3051\u3066\u51fa\u3066\u884c\u304f \u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3002<\/p>\n<p>\u9006\u306b\u53f3\u306b\u5411\u3051\u3066\u5165\u3063\u3066\u304f\u308b\u306e\u3068\u3001\u53f3\u306b\u5411\u3051\u3066\u51fa\u3066\u3044\u304f\u306e\u304c\u5fc5\u8981\u306b\u306a\u308b\u306e\u3067\u3001\u4e0a\u8a18\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3001push_right_in.xml\u3001push_right_out.xml \u3092\u4f5c\u6210\u3002<\/p>\n<pre class=\"prettyprint linenums\">&lt;translate android:fromXDelta=&quot;100%p&quot; \r\n              android:toXDelta=&quot;0&quot; \r\n              android:duration=&quot;300&quot;\/&gt;\r\n&lt;alpha     android:fromAlpha=&quot;1.0&quot;\r\n              android:toAlpha=&quot;1.0&quot;\r\n              android:duration=&quot;300&quot; \/&gt;<\/pre>\n<p>\u4e2d\u8eab\u3092\u898b\u308b\u3068\u3053\u3093\u306a\u8a18\u8ff0\u304c\u3055\u308c\u3066\u3044\u308b\u3002<\/p>\n<p>\u898b\u6163\u308c\u306a\u3044\u306e\u3067\u3068\u307e\u3069\u3046\u304c\u3001\u8981\u3059\u308b\u306b\u3001translate(\u79fb\u52d5\u3059\u308b)\u3001X\u8ef8\u4e0a\u3067\u3001fromXDelta (\u3069\u3053\u304b\u3089) toXDelta(\u3069\u3053\u307e\u3067) \u3092 duration(\u3069\u308c\u3060\u3051\u306e\u6642\u9593\u3092\u304b\u3051\u3066)\u3068\u3001alpah (\u900f\u660e\u5ea6) \u3092 fromAlpa(1.0 \u306a\u3089\u4e0d\u900f\u660e) \u304b\u3089 toAlpha(0.0 \u306a\u3089\u900f\u660e)&#160; \u3068\u3044\u3046\u8a2d\u5b9a\u3060\u3051\u306a\u306e\u3067\u3001\u57fa\u672c left \u306e \u53cd\u5bfe\u3092\u8a2d\u5b9a\u3059\u308b\u3088\u3046\u306b right \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3002<\/p>\n<p>\u57fa\u672c\u4ee5\u4e0a\u3002\u3042\u3068\u306f\u3001\u52d5\u304d\u306b\u5408\u308f\u305b\u3066\u3001\u524d\u30da\u30fc\u30b8\u304b\u6b21\u30da\u30fc\u30b8\u304b\u5224\u5b9a\u3057\u3001\u305d\u308c\u306b\u5408\u308f\u305b\u305f\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3067\u30da\u30fc\u30b8\u9077\u79fb\u3059\u308b\u3002<\/p>\n<h2>\u3054\u308a\u3054\u308a\u30da\u30fc\u30b8\u3081\u304f\u308a\u3092\u5b9f\u88c5\u3059\u308b<\/h2>\n<p>\u3067\u3001ViewFlipper\u3092\u4f7f\u3048\u3070\u3001\u30da\u30fc\u30b8\u3081\u304f\u308a\u3092\u9014\u4e2d\u3067\u6b62\u3081\u305f\u308a\u3068\u304b\u3067\u304d\u308b\u304b\u3068\u601d\u3044\u304d\u3084\u305d\u3046\u3067\u3082\u306a\u3044\u3088\u3046\u3060\u3002(\u3067\u304d\u308b\u306e\u304b\u306a\uff1f)<\/p>\n<p>\u306a\u306e\u3067\u3001\u3054\u308a\u3054\u308a\u5b9f\u88c5\u3057\u3066\u307f\u308b\u3002<\/p>\n<p>\u57fa\u672c\u3001\u540c\u3058\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30eb\u306eViewFlipper \u914d\u4e0b\u306b\u3001\u30da\u30fc\u30b8\u8a2d\u5b9a\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u914d\u7f6e\u3059\u308b\u3088\u3046\u3060\u304c\u3001\u5916\u306b\u51fa\u3057\u3066\u307f\u308b\u3002<\/p>\n<p>LayoutInflater.inflate \u3092\u5229\u7528\u3059\u308b\u3068\u3001\u52d5\u7684\u306b\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/p>\n<p>\u3042\u3068\u3001\u306f\u307e\u3063\u305f\u306e\u304c\u3001ViewFlipper \u306e addView \u30e1\u30bd\u30c3\u30c9\u3067\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u5f15\u6570\u306b\u3068\u308b\u304c\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3068\u30d3\u30e5\u30fc\u3068\u306e\u5bfe\u5fdc\u304c\u3001\u306a\u305c\u304b\u52d5\u304b\u3059\u3068\u5909\u308f\u3063\u3066\u3057\u307e\u3063\u3066\u3001\u305f\u3068\u3048\u3070\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9=1 \u3067 add \u3057\u305f\u3064\u3082\u308a\u306e \u30d3\u30e5\u30fc\u304c 2&#160; getChildAt(2) \u3067\u53d6\u308c\u3066\u304d\u305f\u308a\u3001setDisplayedChild(1) \u3067\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9=0 \u3067\u8a2d\u5b9a\u3057\u305f\u3064\u3082\u308a\u306e\u30d3\u30e5\u30fc\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u308a\u3002\u3002\u3002\u305d\u3082\u305d\u3082\u4f7f\u3044\u65b9\u304c\u60aa\u3044\u306e\u304b\u77e5\u3089\u3093\u3002<\/p>\n<p>\u306a\u306e\u3067\u3001\u52d5\u7684\u306bView\u306e\u5185\u5bb9\u3092\u5165\u308c\u66ff\u3048\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3001\u524d\u3001\u4eca\u3001\u5f8c \u306e3\u3064\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u7528\u610f\u3057\u3001\u305d\u308c\u305e\u308c\u306eID \u3092 int[] viewOrder \u306b\u5916\u3060\u3057\u3057\u3066\u7ba1\u7406\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3002<\/p>\n<p>\u3042\u3068\u306f\u3001View.layout \u3067\u3001\u305d\u308c\u305e\u308c\u306e\u30d3\u30e5\u30fc\u306e\u8868\u793a\u3001\u975e\u8868\u793a\u3092\u5207\u308a\u66ff\u3048\u306a\u304c\u3089\u3001\u4f4d\u7f6e\u3092\u5909\u3048\u3066\u3044\u304f\u3053\u3068\u3067\u3001\u305d\u308c\u306a\u308a\u306b\u52d5\u304f\u3088\u3046\u306b\u306f\u306a\u3063\u305f\u3002 <\/p>\n<h2>\u8ab2\u984c<\/h2>\n<p>\u4e00\u5fdc\u3001<\/p>\n<ol>\n<li>ViewFlipper \uff0b \u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3092\u3064\u304b\u3063\u305f\u5358\u7d14\u306a\u30da\u30fc\u30b8\u3081\u304f\u308a <\/li>\n<li>\u4eca\u306e\u30da\u30fc\u30b8\u3092\u305a\u3089\u3057\u3066\u3001\u6b21\u3084\u524d\u306e\u30da\u30fc\u30b8\u304c\u3042\u308f\u3089\u308c\u308b <\/li>\n<li>\u6b21\u3084\u524d\u306e\u30da\u30fc\u30b8\u304c\u3042\u3089\u308f\u308c\u3066\u3001\u4eca\u306e\u30da\u30fc\u30b8\u3092\u96a0\u3059 <\/li>\n<\/ol>\n<p>3\u30d1\u30bf\u30fc\u30f3\u3092\u4f5c\u3063\u3066\u307f\u305f\u3002layout \u306e\u4f4d\u7f6e\u306e\u8a2d\u5b9a\u3060\u3051\u3067\u3001Desire \u306e \u30db\u30fc\u30e0\u753b\u9762\u306e\u3088\u3046\u306a\u9023\u7d9a\u3057\u3066\u5207\u308a\u66ff\u308f\u308b\u3088\u3046\u306a\u5f62\u306b\u3082\u3067\u304d\u305d\u3046\u3060\u3002<\/p>\n<p>3\u306e\u300c\u6b21\u3084\u524d\u306e\u30da\u30fc\u30b8\u304c\u3042\u3089\u308f\u308c\u3066\u3001\u4eca\u306e\u30da\u30fc\u30b8\u3092\u96a0\u3059\u300d \u5834\u5408\u3001\u4e00\u77ac\u753b\u9762\u304c\u3061\u3089\u3064\u304f\u3002\u3053\u308c\u306f\u4f55\u3068\u304b\u306a\u3089\u3093\u304b\u306a\u3002<\/p>\n<p>&#160;<\/p>\n<pre class=\"prettyprint linenums\">package info.typea.viewflipperapp;\r\n\r\nimport android.app.Activity;\r\nimport android.content.Context;\r\nimport android.os.Bundle;\r\nimport android.util.Log;\r\nimport android.view.LayoutInflater;\r\nimport android.view.Menu;\r\nimport android.view.MenuItem;\r\nimport android.view.MotionEvent;\r\nimport android.view.View;\r\nimport android.view.View.OnTouchListener;\r\nimport android.view.animation.AnimationUtils;\r\nimport android.widget.LinearLayout;\r\nimport android.widget.ViewFlipper;\r\n\r\npublic class ViewFilpperAppActivity extends Activity implements OnTouchListener {\r\n    private static final String LOG_TAG = &quot;MyApp&quot;;\r\n    \r\n    \/* \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30e1\u30cb\u30e5\u30fcID *\/\r\n    private static final int MENU_VIEWFLIP_ANIM  = Menu.FIRST; \r\n    private static final int MENU_MOVE_NEXT      = Menu.FIRST + 1; \r\n    private static final int MENU_MOVE_CURRENT   = Menu.FIRST + 2; \r\n    \r\n    \/* \u30da\u30fc\u30b8\u5207\u308a\u66ff\u3048\u52d5\u4f5c\u30e2\u30fc\u30c9\u3000*\/\r\n    private int procMode = MENU_VIEWFLIP_ANIM;\r\n    \r\n    \/* \u30da\u30fc\u30b8\u3092\u5207\u308a\u66ff\u3048\u308b\u79fb\u52d5\u91cf\u95be\u5024 *\/\r\n    private final int SWITCH_THRESHOLD = 10;\r\n    \r\n    \/* \u30da\u30fc\u30b8\u5207\u308a\u66ff\u3048\u30e2\u30fc\u30c9 *\/\r\n    private final int FLIPMODE_NOMOVE = 0;\r\n    private final int FLIPMODE_NEXT =  1;\r\n    private final int FLIPMODE_PREV = -1;\r\n    private int flipMode = FLIPMODE_NOMOVE;\r\n         \r\n    private ViewFlipper vf    = null;\r\n    private View currentView  = null;\r\n    private View nextView     = null;\r\n    private View prevView     = null;\r\n    \r\n    \/* \u30da\u30fc\u30b8\u306eID\u3068\u9806\u5e8f\u3092\u7ba1\u7406 *\/\r\n    private int viewOrder[]   = null;\r\n    private int curIdx = -1;\r\n    private int preIdx = -1;\r\n    private int nxtIdx = -1;\r\n    \r\n    private int movePageThreshold = 0;\r\n    private float startX;\r\n    \r\n    @Override\r\n    public void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.main);\r\n        LinearLayout layout = (LinearLayout) findViewById(R.id.layout_main);\r\n        layout.setOnTouchListener(this);\r\n    \r\n        vf = (ViewFlipper) findViewById(R.id.details);\r\n\r\n        \/* \r\n         * \u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u5b9f\u884c\u6642\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3057 ViewFlipper\u306b\u683c\u7d0d \r\n         * \u540c\u6642\u306b\u9806\u5e8f\u3092ID\u3067\u7ba1\u7406\u3059\u308b\r\n         * addView(v,idx) \u3067\u7ba1\u7406\u3067\u304d\u308b\u3068\u601d\u3044\u304d\u3084\u3001\u5b9f\u884c\u6642\u306b View \u3068 Index \u306e\u5bfe\u5fdc\u304c\u5909\u308f\u3063\u3066\u3057\u307e\u3046\u3088\u3046\u3060\r\n         *\/\r\n        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r\n        int layouts[] = new int[] {R.layout.layout_page1,\r\n                                    R.layout.layout_page2,\r\n                                    R.layout.layout_page3};\r\n        viewOrder = new int[layouts.length];\r\n        for (int i=0; i&lt;layouts.length; i++) {\r\n            View vw = vi.inflate(layouts[i], null);\r\n            \/\/ ViewFlipper \u306b\u683c\u7d0d\r\n            vf.addView(vw);\r\n            \/\/ ID\u7ba1\u7406\u7528\u914d\u5217\u306b\u4fdd\u6301\r\n            viewOrder[i] = vw.getId();\r\n        }\r\n    }\r\n    @Override\r\n    public boolean onCreateOptionsMenu(Menu menu) {\r\n        \/\/ \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30e1\u30cb\u30e5\u30fc\u3067\u3001\u30da\u30fc\u30b8\u3081\u304f\u308a\u306e\u5b9f\u88c5\u3092\u5207\u308a\u66ff\u3048\u308b\r\n        super.onCreateOptionsMenu(menu);\r\n        menu.add(0, MENU_VIEWFLIP_ANIM, 0, R.string.vewflipper_anim);\r\n        menu.add(0, MENU_MOVE_CURRENT,  0, R.string.current_page_move);\r\n        menu.add(0, MENU_MOVE_NEXT,     0, R.string.next_prev_page_move);\r\n        return true;\r\n    }\r\n    \r\n    @Override\r\n    public boolean onOptionsItemSelected(MenuItem item) {\r\n        procMode = item.getItemId();\r\n        \r\n        \/\/ ViewFlipper \u306b\u8a2d\u5b9a\u3057\u305f\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3092\u89e3\u9664\r\n        vf.setInAnimation(null);\r\n        vf.setOutAnimation(null);\r\n        \r\n        return true;\r\n    }\r\n\r\n    @Override\r\n    public boolean onTouch(View v, MotionEvent event) {\r\n        boolean ret = false;\r\n        \r\n        \/\/ \u30da\u30fc\u30b8\u3081\u304f\u308a\u306e\u5b9f\u88c5\u3092\u5207\u308a\u66ff\u3048\u308b\r\n        switch(procMode) {\r\n        case MENU_VIEWFLIP_ANIM:\r\n            ret =  pageFlipWithSimpleAnimation(v, event);\r\n            break;\r\n        case MENU_MOVE_CURRENT:\r\n            ret = pageFlipWithFingerMoveCurrent(v, event);\r\n            break;\r\n        case MENU_MOVE_NEXT:\r\n            ret = pageFlipWithFingerMoveNext(v, event);\r\n            break;\r\n        }\r\n        return ret;\r\n    }\r\n\r\n    \/**\r\n     * ViewFlipper \u3068 \u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3092\u5229\u7528\u3057\u3066\u5358\u7d14\u306b\u30da\u30fc\u30b8\u3092\u3081\u304f\u308b\r\n     * @param v\r\n     * @param event\r\n     * @return\r\n     *\/\r\n    public boolean pageFlipWithSimpleAnimation(View v, MotionEvent event) {\r\n        switch (event.getAction()) {\r\n        case MotionEvent.ACTION_DOWN:\r\n            startX = event.getX();\r\n            break;\r\n        case MotionEvent.ACTION_UP:\r\n            float currentX = event.getX();\r\n            if (this.startX &gt; currentX ) {\r\n                vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));\r\n                vf.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));\r\n                vf.showNext();\r\n            }\r\n            if (this.startX  &lt; currentX) {\r\n                vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));\r\n                vf.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));\r\n                vf.showPrevious();\r\n            }\r\n        default:\r\n            break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    \/**\r\n     * \u524d\u306e\u30da\u30fc\u30b8\u304a\u3088\u3073\u6b21\u306e\u30da\u30fc\u30b8\u3092\u79fb\u52d5\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u30da\u30fc\u30b8\u3092\u3081\u304f\u308b\r\n     * @param v\r\n     * @param event\r\n     * @return\r\n     *\/\r\n    public boolean pageFlipWithFingerMoveNext(View v, MotionEvent event) {\r\n        float currentX = event.getX();\r\n        \r\n        switch (event.getAction()) {\r\n        case MotionEvent.ACTION_DOWN:\r\n            startX = event.getX();\r\n\r\n            currentView = vf.getCurrentView();\r\n            movePageThreshold = (currentView.getWidth() \/ 5);\r\n            \r\n            int viewCount = viewOrder.length;\r\n            for (int i=0; i&lt;viewCount; i++) {\r\n                \/\/Log.i(&quot;MyApp&quot;, &quot;ord=id:&quot; + viewOrder[i] + &quot;==&quot; + cv.getId());\r\n                if (viewOrder[i] == currentView.getId()) {\r\n                    curIdx = i;\r\n                    break;\r\n                }\r\n            }\r\n            \r\n            if (curIdx &gt;= 0) {\r\n                preIdx = curIdx - 1;\r\n                nxtIdx = curIdx + 1;\r\n                preIdx = (preIdx &lt; 0         )?viewCount - 1:preIdx;\r\n                nxtIdx = (nxtIdx &gt;= viewCount)?0            :nxtIdx;\r\n                \r\n                prevView = vf.findViewById(viewOrder[preIdx]);\r\n                nextView = vf.findViewById(viewOrder[nxtIdx]);\r\n            }\r\n            \r\n            Log.i(LOG_TAG, \r\n                    String.format(&quot;Pre=%d(%d),Cur=%d(%d),Nxt=%d(%d)&quot; \r\n                                    ,preIdx,prevView.getId()\r\n                                    ,curIdx,currentView.getId()\r\n                                    ,nxtIdx,nextView.getId()));\r\n            \r\n            break;\r\n        case MotionEvent.ACTION_MOVE:\r\n            int travelDistanceX = (int)(currentX - this.startX);\r\n            int fingerPosX = (int)currentX;\r\n            \r\n            if (flipMode == FLIPMODE_NOMOVE) {\r\n                if (travelDistanceX &gt; SWITCH_THRESHOLD) {\r\n                    flipMode = FLIPMODE_PREV;\r\n                } else if\r\n                   ( travelDistanceX &lt; (SWITCH_THRESHOLD * -1)  ) {\r\n                    flipMode = FLIPMODE_NEXT;\r\n                } else {\r\n                    flipMode = FLIPMODE_NOMOVE;\r\n                }\r\n            }\r\n            \r\n            if (flipMode == FLIPMODE_PREV) {\r\n                prevView.layout(fingerPosX - prevView.getWidth(), \r\n                          prevView.getTop(), \r\n                          fingerPosX , \r\n                          prevView.getBottom());\r\n                \r\n                vf.bringChildToFront(prevView);\r\n                prevView.setVisibility(View.VISIBLE);\r\n                    \r\n            }\r\n            if ( flipMode == FLIPMODE_NEXT)  {\r\n                nextView.layout(fingerPosX , \r\n                          nextView.getTop(), \r\n                          fingerPosX + currentView.getWidth() + nextView.getWidth(), \r\n                          nextView.getBottom());\r\n                \r\n                vf.bringChildToFront(nextView);\r\n                nextView.setVisibility(View.VISIBLE);\r\n            }\r\n            break;\r\n            \r\n        case MotionEvent.ACTION_UP:\r\n            \r\n            int activeIdx = -1;\r\n            if ((this.startX - currentX) &gt; movePageThreshold ) {\r\n                activeIdx = nxtIdx;\r\n            }else if \r\n                ((this.startX - currentX) &lt; (movePageThreshold * -1) ) {\r\n                activeIdx = preIdx;\r\n            } else {\r\n                activeIdx = curIdx;\r\n            }\r\n            int activeId = viewOrder[activeIdx];\r\n            for(int i=0; i&lt;vf.getChildCount(); i++) {\r\n                \/\/ Log.i(&quot;MyApp&quot;,String.format(&quot;vf_id:%d,sel_id:%d&quot;,vf.getChildAt(i).getId(),activeId));\r\n                if (vf.getChildAt(i).getId() == activeId) {\r\n                    vf.setDisplayedChild(i);\r\n                    break;\r\n                }\r\n            }\r\n            flipMode = 0;\r\n        default:\r\n            break;\r\n        }\r\n        return true;\r\n    }\r\n    \r\n    \/**\r\n     * \u73fe\u5728\u306e\u30da\u30fc\u30b8\u3092\u79fb\u52d5\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u30da\u30fc\u30b8\u3092\u3081\u304f\u308b\r\n     * @param v\r\n     * @param event\r\n     * @return\r\n     *\/\r\n    public boolean pageFlipWithFingerMoveCurrent(View v, MotionEvent event) {\r\n        float currentX = event.getX();\r\n        \r\n        switch (event.getAction()) {\r\n        case MotionEvent.ACTION_DOWN:\r\n            startX = event.getX();\r\n\r\n            currentView = vf.getCurrentView();\r\n            movePageThreshold = (currentView.getWidth() \/ 5);\r\n            \r\n            int viewCount = viewOrder.length;\r\n            for (int i=0; i&lt;viewCount; i++) {\r\n                \/\/Log.i(&quot;MyApp&quot;, &quot;ord=id:&quot; + viewOrder[i] + &quot;==&quot; + cv.getId());\r\n                if (viewOrder[i] == currentView.getId()) {\r\n                    curIdx = i;\r\n                    break;\r\n                }\r\n            }\r\n            \r\n            if (curIdx &gt;= 0) {\r\n                preIdx = curIdx - 1;\r\n                nxtIdx = curIdx + 1;\r\n                preIdx = (preIdx &lt; 0         )?viewCount - 1:preIdx;\r\n                nxtIdx = (nxtIdx &gt;= viewCount)?0            :nxtIdx;\r\n                \r\n                prevView = vf.findViewById(viewOrder[preIdx]);\r\n                nextView = vf.findViewById(viewOrder[nxtIdx]);\r\n            }\r\n            \r\n            Log.i(LOG_TAG, \r\n                    String.format(&quot;Pre=%d(%d),Cur=%d(%d),Nxt=%d(%d)&quot; \r\n                                    ,preIdx,prevView.getId()\r\n                                    ,curIdx,currentView.getId()\r\n                                    ,nxtIdx,nextView.getId()));\r\n            \r\n            break;\r\n        case MotionEvent.ACTION_MOVE:\r\n            int travelDistanceX = (int)(currentX - this.startX);\r\n            int fingerPosX = (int)currentX;\r\n            \r\n            if (flipMode == FLIPMODE_NOMOVE) {\r\n                if (travelDistanceX &gt; SWITCH_THRESHOLD) {\r\n                    flipMode = FLIPMODE_PREV;\r\n                } else if\r\n                   ( travelDistanceX &lt; (SWITCH_THRESHOLD * -1)  ) {\r\n                    flipMode = FLIPMODE_NEXT;\r\n                } else {\r\n                    flipMode = FLIPMODE_NOMOVE;\r\n                }\r\n            }\r\n            \r\n            if (flipMode == FLIPMODE_PREV) {\r\n                currentView.layout(fingerPosX, \r\n                            currentView.getTop(), \r\n                            fingerPosX + currentView.getWidth() , \r\n                            currentView.getBottom());\r\n                \r\n                vf.bringChildToFront(currentView);\r\n                prevView.setVisibility(View.VISIBLE);\r\n                    \r\n            }\r\n            if ( flipMode == FLIPMODE_NEXT)  {\r\n                currentView.layout(fingerPosX - currentView.getWidth() , \r\n                          currentView.getTop(), \r\n                          fingerPosX, \r\n                          currentView.getBottom());\r\n                \r\n                vf.bringChildToFront(currentView);\r\n                nextView.setVisibility(View.VISIBLE);\r\n            }\r\n            break;\r\n            \r\n        case MotionEvent.ACTION_UP:\r\n            \r\n            int activeIdx = -1;\r\n            if ((this.startX - currentX) &gt; movePageThreshold ) {\r\n                activeIdx = nxtIdx;\r\n            }else if \r\n                ((this.startX - currentX) &lt; (movePageThreshold * -1) ) {\r\n                activeIdx = preIdx;\r\n            } else {\r\n                activeIdx = curIdx;\r\n            }\r\n            int activeId = viewOrder[activeIdx];\r\n            for(int i=0; i&lt;vf.getChildCount(); i++) {\r\n                \/\/ Log.i(&quot;MyApp&quot;,String.format(&quot;vf_id:%d,sel_id:%d&quot;,vf.getChildAt(i).getId(),activeId));\r\n                if (vf.getChildAt(i).getId() == activeId) {\r\n                    vf.setDisplayedChild(i);\r\n                    break;\r\n                }\r\n            }\r\n            flipMode = 0;\r\n        default:\r\n            break;\r\n        }\r\n        return true;\r\n    }\r\n}<\/pre>\n<p>main.xml<\/p>\n<pre class=\"prettyprint linenums\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&lt;LinearLayout xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;\r\n    android:orientation=&quot;vertical&quot;\r\n    android:layout_width=&quot;fill_parent&quot;\r\n    android:layout_height=&quot;fill_parent&quot;\r\n    android:background=&quot;#ffffff&quot;\r\n    android:id=&quot;@+id\/layout_main&quot;\r\n    &gt;\r\n    &lt;ViewFlipper android:id=&quot;@+id\/details&quot;\r\n        android:layout_width=&quot;fill_parent&quot;\r\n        android:layout_height=&quot;fill_parent&quot; android:animationCache=&quot;true&quot;&gt;  \r\n    &lt;\/ViewFlipper&gt;\r\n&lt;\/LinearLayout&gt;<\/pre>\n<p>push_right_in.xml<\/p>\n<pre class=\"prettyprint linenums\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&lt;set xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;&gt;\r\n    &lt;translate android:fromXDelta=&quot;0&quot; \r\n               android:toXDelta=&quot;100%p&quot;\r\n               android:duration=&quot;300&quot;\/&gt;\r\n    &lt;alpha android:fromAlpha=&quot;1.0&quot; \r\n           android:toAlpha=&quot;1.0&quot; \r\n           android:duration=&quot;300&quot; \/&gt;\r\n&lt;\/set&gt;<\/pre>\n<p>push_right_out.xml<\/p>\n<pre class=\"prettyprint linenums\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&lt;set xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;&gt;\r\n    &lt;translate android:fromXDelta=&quot;-100%p&quot; \r\n               android:toXDelta=&quot;0&quot; \r\n               android:duration=&quot;300&quot;\/&gt;\r\n    &lt;alpha android:fromAlpha=&quot;1.0&quot; \r\n           android:toAlpha=&quot;1.0&quot; \r\n           android:duration=&quot;300&quot; \/&gt;\r\n&lt;\/set&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u3042\u306e\u9b45\u529b\u7684\u306a iPad \u306e\u672c\u306e\u30da\u30fc\u30b8\u3092\u3081\u304f\u308b\u69d8\u306a\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3002 \u305d\u3053\u307e\u3067\u3068\u306f\u884c\u304b\u306a\u3044\u307e\u3067\u3082\u3001\u3061\u3087\u3063\u3068\u3057\u305f\u30da\u30fc\u30b8\u3092\u3081\u304f\u308b\u3088\u3046\u306a\u52d5\u304d\u306f\u3001\u3061\u3087\u3063\u3068\u3057\u305f\u8a2d\u5b9a\u3067\u3067\u304d\u308b\u3093\u3060\u308d\u3046Android\u3002\u4f4d\u306b\u601d\u3063\u3066\u3044\u305f\u304c\u3001\u305d\u3046\u3067\u3082\u306a\u3044\u611f\u3058\u3002  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","_veu_custom_css":"","veu_display_promotion_alert":"","vkexunit_cta_each_option":"","footnotes":""},"categories":[39],"tags":[],"class_list":["post-236","post","type-post","status-publish","format-standard","hentry","category-android"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=236"}],"version-history":[{"count":0,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/236\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}