Android实现的三种翻页功能原理

 

  【IT168技术】本文给开发者集中展现了Android平台中的三种翻页效果机器实现原理,希望能够对开发者有实际的帮助价值!

  第一种翻页效果如下:

  

  实现原理:

  当前手指触摸点为a,则 a点坐标为(ax,ay), 由三角形acb与三角形cmb为对称三角形并且直线cp为am垂直平分线,则 B点坐标为(ax/2,ay/2)。

  作gf垂直于om且cb垂直于am, 三角形cfg与gfm相似,则 cf:gf = gf:mf cf=(gf * gf) / mf gf长度为g点纵坐标 mf长度为g点横坐标

  cf长度可求 c点坐标可求 由c点、g点可确定过两点间的直线, 当该直线中x=0时求出与y足交点。

  

  第二种翻页效果

  

  实现原理:

  使用贝赛尔曲线。曲线有四个点:起始点、终止点(也称锚点)以及两个相互分离的中间点。滑动两个中间点,贝塞尔曲线的形状会发生变化。

  根据第一种翻页效果原理可以确定a、e、h、f、g ,由eh平行于cj且af垂直于eh,则 af垂直于cj则三角形egf相似于三角形cnf 则有ef:cf = gf:nf 。

  设n为ag中点 则有cf=(3/2)*ef ,则c点坐标可求 由c点、k点坐标已知可知过两点间的直线

  由该直线可计算与y轴相交点j 由a、e、c、j可计算两条直线的相交点b 同理可求点k。

  在Android中的具体实现步骤:

  起始页展示

  1.创建屏幕尺寸的bmp 2.将图片转化为canvas 3.获取起始页面数据 3.在canvas中绘制起始页数据 4.在当前视图中复写onDraw进行重绘出bmp对象

  翻页处理

  1.初始化时创建两个bmp(bmp1、bmp2)并将其转换为canvas(canvas1、canvas2)

  2.获取手势首次触摸的区域 (例:当首次点击屏幕的位置x<50&&y<50则为左上角)

  3.根据首次点击区域判断需要展示的数据(例:首次点击处于左侧区域【左上、左下】的则判断操作为下一页操作)

  4.获取下一页中数据并绘制出来在canvas2中

  5.根据1中获取的区域位置调用起始动画使视图移动到手势首次点击位置

  6.获取手势每次移动的坐标并根据移动坐标计算绘制的各个点的坐标

  7.每次移动刷新视图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现备忘录功能需要以下步骤: 1. 创建备忘录界面布局:使用RecyclerView或ViewPager作为主要布局,其中每个备忘录被表示为一个单独的布局项。 2. 创建备忘录数据模型:创建一个备忘录数据模型,其中包括备忘录标题、内容和时间等信息。 3. 创建备忘录适配器:使用RecyclerView或ViewPager的适配器将备忘录数据模型与备忘录界面布局相匹配。 4. 实现备忘录功能:为备忘录界面布局添加上一页和下一页按钮,并使用适配器中的数据集合实现功能。 下面是一个简单的实现备忘录功能的代码示例: 1. 备忘录数据模型: ``` public class Memo { private String title; private String content; private String time; public Memo(String title, String content, String time) { this.title = title; this.content = content; this.time = time; } public String getTitle() { return title; } public String getContent() { return content; } public String getTime() { return time; } } ``` 2. 备忘录适配器: ``` public class MemoAdapter extends RecyclerView.Adapter<MemoAdapter.MemoViewHolder> { private List<Memo> memoList; public MemoAdapter(List<Memo> memoList) { this.memoList = memoList; } @NonNull @Override public MemoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.memo_item, parent, false); return new MemoViewHolder(view); } @Override public void onBindViewHolder(@NonNull MemoViewHolder holder, int position) { Memo memo = memoList.get(position); holder.titleText.setText(memo.getTitle()); holder.contentText.setText(memo.getContent()); holder.timeText.setText(memo.getTime()); } @Override public int getItemCount() { return memoList.size(); } public class MemoViewHolder extends RecyclerView.ViewHolder { TextView titleText; TextView contentText; TextView timeText; public MemoViewHolder(View itemView) { super(itemView); titleText = itemView.findViewById(R.id.title_text); contentText = itemView.findViewById(R.id.content_text); timeText = itemView.findViewById(R.id.time_text); } } } ``` 3. 备忘录界面布局: ``` <androidx.recyclerview.widget.RecyclerView android:id="@+id/memo_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 4. 实现备忘录功能: ``` public class MemoActivity extends AppCompatActivity { private List<Memo> memoList; private RecyclerView memoRecyclerView; private MemoAdapter memoAdapter; private int currentPage = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_memo); memoList = new ArrayList<>(); memoList.add(new Memo("Memo 1", "Content 1", "2021-10-01")); memoList.add(new Memo("Memo 2", "Content 2", "2021-10-02")); memoList.add(new Memo("Memo 3", "Content 3", "2021-10-03")); memoList.add(new Memo("Memo 4", "Content 4", "2021-10-04")); memoList.add(new Memo("Memo 5", "Content 5", "2021-10-05")); memoRecyclerView = findViewById(R.id.memo_recycler_view); memoAdapter = new MemoAdapter(memoList); memoRecyclerView.setAdapter(memoAdapter); Button prevButton = findViewById(R.id.prev_button); prevButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentPage > 0) { currentPage--; memoRecyclerView.scrollToPosition(currentPage); } } }); Button nextButton = findViewById(R.id.next_button); nextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentPage < memoList.size() - 1) { currentPage++; memoRecyclerView.scrollToPosition(currentPage); } } }); } } ``` 在上面的示例中,我们创建了一个包含5个备忘录的列表,并将其传递给MemoAdapter。然后,我们在备忘录界面布局中添加了上一页和下一页按钮,并在MemoActivity中实现了按钮的点击事件。在按钮的点击事件中,我们更新当前页码并使用RecyclerView的scrollToPosition方法将列表滚动到正确的位置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值