<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    L遷客

    技術(shù)博客
    隨筆 - 1, 文章 - 12, 評(píng)論 - 1, 引用 - 0
    數(shù)據(jù)加載中……

    Android 自定義控件 eBook 翻書(shū)效果

    Android 自定義控件 eBook 翻書(shū)效果

    效果圖:

     

    Book.java文件:

    package com.book;import android.app.Activity;

    import android.os.Bundle;

    import android.util.Log;

    import android.view.View;

    import android.widget.ImageView;public class Book extends Activity {

        /** Called when the activity is first created. */

    eBook mBook;

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

            mBook = (eBook)findViewById(R.id.my_book);

            mBook.addLayoutRecForPage(R.layout.page,21);

            mBook.setListener(new eBook.Listener() {

        public void onPrevPage() {

         updateContent();

        }

        public void onNextPage() {

         updateContent();

        }

        public void onInit() {

         updateContent();

       }

       });

        }

        private void updateContent(){

        int index = mBook.getIndexForLeftPage();

        View left = mBook.getLeftPage(),right = mBook.getRightPage();

            View next1 = mBook.getNextPage1(),next2 = mBook.getNextPage2();

            View prev1 = mBook.getPrevPage1(),prev2 = mBook.getPrevPage2();

            if(left != null)setImg(left,index);

            if(right != null)setImg(right,index+1);

            if(next1 != null)setImg(next1,index+2);

            if(next2 != null)setImg(next2,index+3);

            if(prev1 != null)setImg(prev1,index-1);

            if(prev2 != null)setImg(prev2,index-2);

            mBook.invalidate();

        }

    private void setImg(View v , int index){

       if(index >= 0 && index < 20){

        ImageView img = (ImageView)v.findViewById(R.id.book_img);

        if(img == null)return;

        Log.d("eBook","set Img");

        switch(index%6){

        case 0:

         img.setImageResource(R.drawable.p1);

         break;

        case 1:

         img.setImageResource(R.drawable.p2);

         break;

        case 2:

         img.setImageResource(R.drawable.p3);

         break;

        case 3:

         img.setImageResource(R.drawable.p4);

         break;

        case 4:

         img.setImageResource(R.drawable.p5);

         break;

        case 5:

         img.setImageResource(R.drawable.p6);

         break;

        default:

         break;

        }

       }

    }

    }main.xml文件:<?xml version="1.0" encoding="utf-8"?>

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

        android:orientation="vertical"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent">

    <com.book.eBook android:id="@+id/my_book"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"/>

    </LinearLayout>page.xml文件:<?xml version="1.0" encoding="utf-8"?>

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

        android:orientation="vertical"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:padding="20dip"

        android:background="#FFFFDD">

        <ImageView android:layout_width="fill_parent" android:id="@+id/book_img"

        android:layout_height="fill_parent" android:layout_weight="1"

        android:scaleType="fitXY" android:src="@drawable/p1"/>

        <com.book.TelEdit

        android:id="@+id/book_text"

        android:layout_width="fill_parent"

        android:background="#ffffdd"

        android:gravity="top"

        android:typeface="sans"

        android:capitalize="sentences"

        android:lineSpacingExtra="5dip"

        android:textSize="15dip"

        android:textColor="#000000"

        android:layout_height="fill_parent"

        android:paddingTop="30dip"

        android:layout_weight="1"/>

    </LinearLayout>eBook.java文件部分代碼:package com.book;import java.util.ArrayList;

    import java.util.Date;

    import java.util.List;import android.content.Context;

    import android.graphics.Bitmap;

    import android.graphics.Canvas;

    import android.graphics.Color;

    import android.graphics.LinearGradient;

    import android.graphics.Paint;

    import android.graphics.Path;

    import android.graphics.Point;

    import android.graphics.PorterDuffXfermode;

    import android.graphics.Shader;

    import android.graphics.PorterDuff.Mode;

    import android.util.AttributeSet;

    import android.util.Log;

    import android.view.GestureDetector;

    import android.view.LayoutInflater;

    import android.view.MotionEvent;

    import android.view.View;

    import android.view.GestureDetector.OnGestureListener;

    import android.widget.FrameLayout;

    import android.widget.LinearLayout;public class eBook extends FrameLayout{

    public static final String LOG_TAG = "eBook";

    List<Integer> myRecPages;

    int totalPageNum;

    Context mContext;

    boolean hasInit = false;

    final int defaultWidth = 600 , defaultHeight = 400;

    int contentWidth = 0;

    int contentHeight = 0;

    View leftPage,rightPage,llPage,lrPage,rrPage,rlPage;

    LinearLayout mView;

    bookView mBookView;

    boolean closeBook = false;

    private enum Corner {

       LeftTop,

       RightTop,

       LeftBottom,

       RightBottom,

       None

    };

    private Corner mSelectCorner;

    final int clickCornerLen = 250*250; //50dip

    float scrollX = 0,scrollY = 0;

    int indexPage = 0;

    private enum State {

       ABOUT_TO_ANIMATE,

       ANIMATING,

       ANIMATE_END,

       READY,

       TRACKING

    };

    private State mState;

    private Point aniStartPos;

    private Point aniStopPos;

    private Date aniStartTime;

    private long aniTime = 2000;

    private long timeOffset = 900;

    Listener mListener;

    private GestureDetector mGestureDetector;

    private BookOnGestureListener mGestureListener;

    public eBook(Context context) {

       super(context);

       Init(context);

    }public eBook(Context context, AttributeSet attrs) {

       super(context, attrs);

       Init(context);

    }...省略}

     

     

     

    該控件大致實(shí)現(xiàn)方法:

    eBook繼承FrameLayout,好處在于FrameLayout有圖層效果,后添加的View類能覆蓋前面的View

    初始化:定義一個(gè)LinearLayout的成員變量mView,將page.xml inflate View分別用leftPagerightPage引用,并初始化其數(shù)據(jù),將leftPagerightPage通過(guò)addView添加到mView,然后將mView添加到eBook。在eBook里定義一個(gè)私有類BookView extends View 并定義成員變量 BookView mBookView 最后將mBookView添加的eBook中,這樣,mView中的內(nèi)容為書(shū)面內(nèi)容,mBookView中的內(nèi)容為特效內(nèi)容。

    后續(xù)手勢(shì)動(dòng)作:可將各種手勢(shì)的特效動(dòng)作畫(huà)于mBookView的畫(huà)布中。

    效果圖, 效果, Android, activity, created

    posted on 2013-02-24 16:40 L遷客 閱讀(86) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费大片黄手机在线观看| 一区二区三区观看免费中文视频在线播放 | 青青青亚洲精品国产| 成在人线AV无码免费| 亚洲人成电影网站色www| 成年女人免费视频播放体验区| 亚洲三级视频在线观看| 在线永久看片免费的视频| 亚洲欧洲日韩综合| 成人性生交视频免费观看| 久久久久久亚洲av无码蜜芽| 永久免费av无码网站大全| 国产亚洲漂亮白嫩美女在线| 亚洲片一区二区三区| 叮咚影视在线观看免费完整版| 久久亚洲AV成人无码| 免费大片黄在线观看yw| 特级毛片aaaa免费观看| 4338×亚洲全国最大色成网站| 中文字幕乱码系列免费| 91亚洲国产在人线播放午夜| 最近免费中文字幕大全视频| 国产成人久久精品亚洲小说| 亚洲一区二区三区香蕉| 1000部啪啪未满十八勿入免费| 亚洲色欲色欲www| 亚洲?v女人的天堂在线观看| 女同免费毛片在线播放| 亚洲剧情在线观看| 亚洲av无码乱码在线观看野外| a级毛片毛片免费观看永久| 亚洲一区精品视频在线| 午夜亚洲av永久无码精品 | 免费精品视频在线| 亚洲美女在线国产| 91精品国产免费久久国语蜜臀| 亚洲无人区码一二三码区别图片| 亚洲国产婷婷综合在线精品| 18女人毛片水真多免费| 特级毛片免费观看视频| 亚洲日本在线播放|