Android 翻书效果

该控件大致实现方法:

       eBook继承FrameLayout,好处在于FrameLayout有图层效果,后添加的View类能覆盖前面的View。

       初始化:定义一个LinearLayout的成员变量mView,将page.xml inflate 成View分别用leftPage,rightPage引用,并初始化其数据,将leftPage,rightPage通过addView添加到 mView,然后将mView添加到eBook。在eBook里定义一个私有类BookView extends View。 并定义成员变量 BookView mBookView; 最后将mBookView添加的eBook中,这样,mView中的内容为书面内容,mBookView中的内容为特效内容。后续手势动作:可将各种手势的特效动作画于mBookView的画布中。


    我们在来看看xml代码:

java代码:
  1. main.xml文件:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
  3.      android:layout_width="fill_parent"
  4.      android:layout_height="fill_parent"
  5.      android:orientation="vertical" >
  6.      <!-- 
  7.         广告创意放置的位置。
  8.          此处我放在Activity最顶部
  9.         -->
  10.       <!-- 广告位设置开始 -->
  11.       <com.adsame.mai.AdsameMob
  12.           android:layout_height="100dp"
  13.           android:layout_width="fill_parent"
  14.           android:id="@+id/adsameMobId"/>
  15.      <!-- 广告位设置结束 -->
  16.       <TextView
  17.             android:layout_width="fill_parent"
  18.             android:layout_height="wrap_content"
  19.             android:text="@string/hello" />
  20.  </LinearLayout>





  21.            

  22.  


  23.                
             
                <!-- 广告位设置结束 -->
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
          </LinearLayout>

  24.  
      


  25. page.xml文件:
  26. <?xml version="1.0" encoding="utf-8"?>
  27. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  28. android:orientation="vertical"
  29. android:layout_width="fill_parent"
  30. android:layout_height="fill_parent"
  31. android:padding="20dip"
  32. android:background="#FFFFDD">
  33. <ImageView android:layout_width="fill_parent" android:id="@+id/book_img"
  34. android:layout_height="fill_parent" android:layout_weight="1"
  35. android:scaleType="fitXY" android:src="@drawable/p1"/>
  36. <com.book.TelEdit
  37. android:id="@+id/book_text"
  38. android:layout_width="fill_parent"
  39. android:background="#ffffdd"
  40. android:gravity="top"
  41. android:typeface="sans"
  42. android:capitalize="sentences"
  43. android:lineSpacingExtra="5dip"
  44. android:textSize="15dip"
  45. android:textColor="#000000"
  46. android:layout_height="fill_parent"
  47. android:paddingTop="30dip"
  48. android:layout_weight="1"/>
  49. </LinearLayout>
复制代码

控件TelEdit.java代码:

java代码:
  1. package eoe.book;

  2. import android.content.Context;
  3. import android.graphics.Canvas;
  4. import android.graphics.Color;
  5. import android.graphics.Paint;
  6. import android.util.AttributeSet;
  7. import android.view.WindowManager;
  8. import android.widget.EditText;

  9. public class TelEdit extends EditText {
  10. Context mContext;
  11. public TelEdit(Context context) {
  12. super(context);
  13. mContext = context;
  14. }

  15. public TelEdit(Context context, AttributeSet attrs) {
  16. super(context, attrs);
  17. mContext = context;
  18. }

  19. public TelEdit(Context context, AttributeSet attrs, int defStyle) {
  20. super(context, attrs, defStyle);
  21. mContext = context;
  22. }

  23. protected void onDraw(Canvas canvas) {
  24. WindowManager wm = (WindowManager) mContext.getSystemService("window");
  25. int windowWidth = wm.getDefaultDisplay().getWidth();
  26. int windowHeight = wm.getDefaultDisplay().getHeight();
  27. Paint paint = new Paint();
  28. paint.setStyle(Paint.Style.FILL);
  29. paint.setColor(Color.BLACK);


  30. int paddingTop = getPaddingTop();
  31. int paddingBottom = getPaddingBottom();
  32. int scrollY = getScrollY();
  33. int scrollX = getScrollX() + windowWidth;
  34. int innerHeight = scrollY + getHeight() - paddingBottom;
  35. int lineHeight = getLineHeight();
  36. int baseLine = scrollY+ (lineHeight - ((scrollY - paddingTop) % lineHeight));
  37. int x = 8;


  38. while (baseLine < innerHeight) {
  39. canvas.drawLine(x, baseLine, scrollX - x, baseLine, paint);
  40. baseLine += lineHeight;
  41. }
  42. super.onDraw(canvas);
  43. }

  44. }
复制代码

      eBook.java文件部分代码:


java代码:

  1. package eoe.book;

  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import android.content.Context;
  6. import android.graphics.Bitmap;
  7. import android.graphics.Canvas;
  8. import android.graphics.Color;
  9. import android.graphics.LinearGradient;
  10. import android.graphics.Paint;
  11. import android.graphics.Path;
  12. import android.graphics.Point;
  13. import android.graphics.PorterDuffXfermode;
  14. import android.graphics.Shader;
  15. import android.graphics.PorterDuff.Mode;
  16. import android.util.AttributeSet;
  17. import android.util.Log;
  18. import android.view.GestureDetector;
  19. import android.view.LayoutInflater;
  20. import android.view.MotionEvent;
  21. import android.view.View;
  22. import android.view.GestureDetector.OnGestureListener;
  23. import android.widget.FrameLayout;
  24. import android.widget.LinearLayout;

  25. public class eBook extends FrameLayout{
  26. public static final String LOG_TAG = "eBook";
  27. List<Integer> myRecPages;
  28. int totalPageNum;
  29. Context mContext;
  30. boolean hasInit = false;
  31. final int defaultWidth = 600 , defaultHeight = 400;
  32. int contentWidth = 0;
  33. int contentHeight = 0;
  34. View leftPage,rightPage,llPage,lrPage,rrPage,rlPage;
  35. LinearLayout mView;
  36. bookView mBookView;
  37. boolean closeBook = false;

  38. private enum Corner {
  39. LeftTop,RightTop,LeftBottom,RightBottom,None
  40. };

  41. private Corner mSelectCorner;
  42. final int clickCornerLen = 250*250; //50dip
  43. float scrollX = 0,scrollY = 0;
  44. int indexPage = 0;

  45. private enum State {
  46. ABOUT_TO_ANIMATE,ANIMATING,ANIMATE_END,READY,TRACKING
  47. };

  48. private State mState;
  49. private Point aniStartPos;
  50. private Point aniStopPos;
  51. private Date aniStartTime;
  52. private long aniTime = 2000;
  53. private long timeOffset = 900;
  54. Listener mListener;


  55. private GestureDetector mGestureDetector;
  56. private BookOnGestureListener mGestureListener;

  57. public eBook(Context context) {
  58. super(context);
  59. Init(context);
  60. }

  61. public eBook(Context context, AttributeSet attrs) {
  62. super(context, attrs);
  63. Init(context);
  64. }

  65. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值