- 浏览: 221696 次
文章分类
最新评论
-
lmjmn456:
为什么我的TestHall里面看不到RomeA RomeB R ...
Android 通过反射启动未安装的APK中的Activity -
wangleyiang:
uyerp 写道这样的话,只能将插件的元素显示到Hall中。有 ...
Android 通过反射启动未安装的APK中的Activity -
uyerp:
这样的话,只能将插件的元素显示到Hall中。有什么办法能在不安 ...
Android 通过反射启动未安装的APK中的Activity -
wangleyiang:
提高文学修养 写道不好意思,有时间尝试一下,谢谢!有问题提出来 ...
Android 主题之主题文件夹 -
提高文学修养:
不好意思,有时间尝试一下,谢谢!
Android 主题之主题文件夹
看到网络上有个关于自定的页面控件,但没有实现和用户的交互。根据交互方式的不同,添加方法也多种多样。下面对横向的触碰做个简要说明,这个操作可以在
View里面完成,也可以在View外面完成。为了不修改原来的View代码,本例仅仅从View外部实现该操作,效果如图:
以下是View的自定义代码,来自 ,详情如下:
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; public class PointPageView extends View { private int mPageSize; private int mPageIndex; private int mPointSize; private int mPointSpan; private int mSelectPointSize; private int mStep; private int mDisplaySize; private int mDisplayIndex; private Paint paint; private void init() { mPointSize = 3; mSelectPointSize = mPointSize; mPointSpan = 3 * mPointSize; mStep = 1; paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.WHITE); } public PointPageView(Context context) { super(context, null); init(); } /** * Used to inflate the Workspace from XML. */ public PointPageView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void setPageSize(int pageSize) { mPageSize = Math.max(pageSize, 0); mDisplaySize = (int)Math.ceil((double)mPageSize / mStep); invalidate(); } public int getPageSize() { return mPageSize; } public void setPageIndex(int pageIndex) { mPageIndex = Math.min(Math.max(pageIndex, 0), mPageSize - 1); mDisplayIndex = (int)Math.floor((double)mPageIndex / mStep); invalidate(); } public int getPageIndex() { return mPageIndex; } public void setColor(int color) { paint.setColor(color); } public void setPointSize(int size) { mPointSize = size; } public void setSelectPointSize(int size) { mSelectPointSize = size; } public void setPointSpan(int span) { mPointSpan = span; } public void setStep(int step) { mStep = step; } public int getStep() { return mStep; } @Override public void draw(Canvas canvas) { super.draw(canvas); drawAllPoint(canvas); } private void drawAllPoint(Canvas canvas) { canvas.save(); final int paddingLeft = mPointSpan; final int width = getMeasuredWidth(); final int height = getMeasuredHeight(); int radius = mPointSize; int contentWidth = (radius + paddingLeft) * mPageSize; int beginX = (width - contentWidth) / 2; int beginY = height / 2; for (int i = 0; i < mDisplaySize; i++) { if (i == mDisplayIndex) { paint.setAlpha(255); radius = mSelectPointSize; } else { paint.setAlpha(128); radius = mPointSize; } canvas.drawCircle(beginX, beginY, radius, paint); beginX = beginX + radius + radius + paddingLeft; } canvas.restore(); } }
判断事件的代码比较简单,比较ACTION_DOWN和ACTION_UP之间X方向的值的变化的大小和方向判断是横向向左还是横向向右操作,进而更新自定义View的状态即可,详见代码:
import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public class CustomizedViewActivity extends Activity implements OnTouchListener { private PointPageView pageView; /** 上次X坐标值 */ private float lastX; /** X方向变化的最小有效值 */ private static float MINIMUM_EFFECTIVE_DISTANCE = 10.0f; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); pageView = new PointPageView(this); pageView.setPageSize(5); pageView.setColor(Color.GREEN); pageView.setSelectPointSize(3); pageView.setPointSpan(20); pageView.setPageIndex(2); // 设置触摸监听器 pageView.setOnTouchListener(this); setContentView(pageView); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 在一次Touch循环中,初始化lastX值 lastX = event.getX(); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: float currentX = event.getX(); if (currentX - lastX > MINIMUM_EFFECTIVE_DISTANCE) { // 向右 pageView.setPageIndex(getNextPageIndex()); } else if (currentX - lastX < -MINIMUM_EFFECTIVE_DISTANCE) { // 向左 pageView.setPageIndex(getPrePageIndex()); } break; case MotionEvent.ACTION_CANCEL: break; case MotionEvent.ACTION_OUTSIDE: break; default: break; } return true; } private int getPrePageIndex() { if (pageView != null) { int currentPageIndex = pageView.getPageIndex(); if (currentPageIndex == 0) { return currentPageIndex; } else { return currentPageIndex - 1; } } return 0; } private int getNextPageIndex() { if (pageView != null) { int count = pageView.getPageSize(); int currentPageIndex = pageView.getPageIndex(); if (currentPageIndex == count - 1) { return currentPageIndex; } else { return currentPageIndex + 1; } } return 0; } }
当然,利用MotionEvent中的其它信息可以构建更加复杂的屏幕触摸事件,比如:横向触摸滑动时的速度,加速度,平均速度等!:)
发表评论
-
避免OOM的一种方式
2014-03-11 09:30 882从网上看到一个避免OOM的方式,创建图片时,使用decod ... -
锁屏操作
2013-11-01 11:29 957从API Level 8开始,添加了一个新的类Device ... -
让Surface中绘制的内容响应用户的交互(状态变化)
2013-10-28 16:54 894被绘制的内容响应用户的交互,简单的看就是绘制内容的状态在用 ... -
在自定义的SurfaceView中绘制内容
2013-10-28 16:53 2867View和SurfaceView都可以用于绘制图形,但各有 ... -
在自定义的View中绘制内容
2013-10-28 10:52 949程序开发中,常常需要完成某一个特殊效果而绘制一些内容。 ... -
获取Bitmap大小
2013-10-08 17:59 1030Bitmap的操作常常会导致OOM(内存溢出)。 在处理B ... -
隐藏键盘的一种处理方法
2013-10-08 15:18 672通过调用系统服务来隐藏键盘的一种处理方法: // 获 ... -
通过系统调用裁剪图片
2013-10-08 15:05 1057分享一个Android源码查看网页:http://andr ... -
拍照,相册获取图片,系统裁剪图片
2013-09-30 12:41 1608获取相册图片的一种写法: Intent intent = ... -
转-Android开发环境搭建篇详尽的教程实例汇
2013-09-27 13:50 758原文:http://wiki.eoe.cn/page/An ... -
一种更改包名的方式-Linux命令
2013-09-27 09:54 1146在Android应用程序中更改包名,可以从文件的角度来解决 ... -
Android 通过反射启动未安装的APK中的Activity
2013-02-05 16:32 8879JAVA反射机制是在运行状态中,对于任意一个类,都能够知道 ... -
Android 判断程序是否是系统程序
2013-02-04 14:12 1661获得Android手机中安装程序是否是系统程序,比较好的方式 ... -
Android R
2013-02-01 16:18 1252import java.lang.reflect.Fiel ... -
Android 主题之主题文件夹
2013-02-01 14:22 1714从文件夹中获得主题资源,然后在程序中做相关调整,下面看一个 ... -
Android 主题之安装的APK主题文件
2013-01-31 17:25 1849Android中应用主题设置 ... -
『转』Android Intent常见应用
2013-01-30 16:46 1367转自:http://blog.csdn.net/spy19 ... -
Android px sp dip转化
2013-01-30 12:53 981一个关于px, sp, dip转化的代码: public ... -
Android 布局
2013-01-30 11:19 1322对Android提供的基本布局控件进行组合,可以实现一些相 ... -
Android 添加动画的标签栏
2013-01-29 23:10 1116运行效果图: 实现原理:标签布局好了以后,标签所在V ...
相关推荐
《Android自定义控件开发入门与实战》这本书深入浅出地讲解了如何在Android平台上创建和使用自定义控件,旨在帮助开发者从基础知识到实战技巧,全方位掌握这一核心技术。 一、自定义控件基础 自定义控件在Android中...
Android自定义控件开发入门与实战从自定义基础到实战的讲解。一步步深入。适合有一定Android基础的读者。本压缩包中自带了推荐的pdf阅读器。大家要是喜欢这本文档,推荐去京东,天猫,当当买支持一下默默付出的作者...
本文将深入探讨Android自定义控件的概念、重要性以及如何通过重写已有控件来扩展其功能,帮助开发者从初阶迈进高阶。 首先,我们了解什么是自定义控件。在Android系统中,预置了大量的标准控件,如Button、TextView...
这个压缩包“CustomViews”很可能是包含了一系列Android自定义控件的示例项目,旨在帮助开发者理解和学习如何在Android Studio 1.0.2环境下创建和使用自定义控件。 自定义控件通常涉及以下关键知识点: 1. **...
本资源"android自定义控件源码"提供了一套详细的自定义控件实现案例,帮助开发者深入理解自定义控件的工作原理和实现方法。配合文章《Android自定义控件深度解析》(文章地址:...
在Android开发中,自定义控件是提升应用用户体验和界面设计独特性的重要手段。本教程主要探讨如何通过继承和组合的方式来自定义控件,适用于已经有一定Android基础的开发者进行进阶学习。 首先,我们来理解自定义...
总结起来,Android自定义组合控件的实现涉及到了对Android UI框架的深入理解和实践,包括继承自定义View或ViewGroup、测量与布局、绘制、事件处理等关键步骤。通过这样的方式,开发者可以构建出功能强大、交互丰富的...
这个压缩包"Android自定义控件源码.rar"包含了一些自定义控件的源代码,虽然不能保证每个都可直接运行,但它们提供了丰富的学习资源,帮助开发者理解和实践自定义控件的创建过程。下面将详细探讨Android自定义控件的...
至此,我们完成了一个简单的Android自定义控件,它能展示图片和文字。然而,自定义控件的能力远不止于此。你可以添加更多的功能,如触摸事件处理、动画效果,甚至动态改变内容。通过深入理解Android的绘图API和布局...
本文将深入探讨如何创建一个美观的自定义拖动条控件,即"Android自定义控件之拖动条"。我们将讨论以下几个关键知识点: 1. **基础知识**:在Android中,基本的滑动条控件是`SeekBar`,它允许用户通过拖动滑块来选择...
- **性能优化**:自定义控件时要尽量减少不必要的绘制和计算,避免在`onDraw()`方法中做复杂的操作,以提高性能。 - **兼容性测试**:确保自定义控件在不同版本的Android系统及不同分辨率的设备上都能正常工作。 ...
1 本书从动画、绘图、视图三方面介绍Android自定义控件相关知识,内容系统全面,并配以翔实的案例。 2 Android自定义控件涉及动画和色彩,本书将图片地址制作成二维码,可供读者扫描观看。 3 本书适合初高级水平从业...
在Android开发中,自定义控件是提升应用界面独特...通过学习和分析`customcontrols`中的代码,开发者可以深入理解Android自定义控件的工作原理,提高自己的Android开发技能,同时也能为今后的项目开发积累宝贵的经验。
《Android自定义控件入门到实战》源码提供了一套完整的自定义控件学习资源,涵盖了从基础到高级的各种实例,帮助开发者深入理解和实践Android自定义控件的开发。 自定义控件的核心在于扩展Android内置的View或...
以下将详细介绍Android自定义组合控件的相关知识点。 一、自定义控件的分类 1. 组件扩展:对现有控件进行功能增强或样式修改,例如自定义Button增加动画效果。 2. 组合控件:结合多个基础控件,形成新的复合控件,...
《Android自定义控件入门到实战》是一本深入讲解Android平台下自定义控件开发的教程,源码2018.10版提供了一套完整的实践案例,帮助开发者从基础到进阶全面掌握自定义控件的制作技巧。这份资料涵盖了从基本的自定义...
在Android开发中,自定义控件和框架的运用是提升应用独特性和性能的关键。下面将对"android 自定义控件实现demo收集 及 框架收集"这一主题进行深入探讨。 首先,自定义控件在Android应用开发中扮演着重要角色。它们...
通过以上步骤,我们可以创建一个既美观又实用的自定义控件,它能够直观地展示声音的动态变化,并允许用户通过触摸交互进行操作。这个控件可以应用于各种场景,如音乐应用中的实时音量反馈,或者在语音识别、语音聊天...
在Android开发中,自定义控件是提升应用独特性和用户体验的重要手段。本教程将通过一个具体的实例——saRoundProgressBarDemo,来教你如何编写一个自定义的圆形进度条控件。这个自定义控件不仅提供了基本的进度显示...
在Android开发中,自定义控件是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何根据【标题】"Android自定义...如果你下载并研究这个"自定义组合控件"的示例,相信你会对Android自定义控件有更深入的理解。