- 浏览: 656654 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
ZHOU452840622:
少了一个构造函数 晕
Android画图之Matrix(一) -
ZHOU452840622:
06-30 17:39:19.193: E/AndroidRu ...
Android画图之Matrix(一) -
ZHOU452840622:
为什么报错哦
Android画图之Matrix(一) -
悬空90:
只是获取activity的名字而已, 没有实例。 反射 ...
获取屏幕上正在显示的activity -
night_iv:
重写下面两个函数EditText完全作废,点击没有反应没有光标 ...
Android自由选择TextView的文字
今天偶然看到一个圆盘形的菜单,还可以转动,感觉挺有意思,然后想了想,做了个简单的效果。
思路是这样的,定一个原点和一个半径,圆的四周均匀分布每个菜单。为了方便计算,菜单的坐标用度数表示,然后转化为极坐标计算。
定某个点为起始点,根据总菜单数确定每个点增加的度数,然后依次确定每个点的度数,也就确定了坐标。
package chroya.demo.roundspin; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Log; import android.view.MotionEvent; import android.view.View; /** * 圆盘式的view * @author chroya * */ public class RoundSpinView extends View { private Paint mPaint = new Paint(); //stone列表 private BigStone[] mStones; //数目 private static final int STONE_COUNT = 6; //圆心坐标 private int mPointX=0, mPointY=0; //半径 private int mRadius = 0; //每两个点间隔的角度 private int mDegreeDelta; public RoundSpinView(Context context, int px, int py, int radius) { super(context); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(2); setBackgroundResource(R.drawable.menubkground); mPointX = px; mPointY = py; mRadius = radius; setupStones(); computeCoordinates(); } /** * 初始化每个点 */ private void setupStones() { mStones = new BigStone[STONE_COUNT]; BigStone stone; int angle = 0; mDegreeDelta = 360/STONE_COUNT; for(int index=0; index<STONE_COUNT; index++) { stone = new BigStone(); stone.angle = angle; stone.bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.menu1+index); angle += mDegreeDelta; mStones[index] = stone; } } /** * 重新计算每个点的角度 */ private void resetStonesAngle(float x, float y) { int angle = computeCurrentAngle(x, y); Log.d("RoundSpinView", "angle:"+angle); for(int index=0; index<STONE_COUNT; index++) { mStones[index].angle = angle; angle += mDegreeDelta; } } /** * 计算每个点的坐标 */ private void computeCoordinates() { BigStone stone; for(int index=0; index<STONE_COUNT; index++) { stone = mStones[index]; stone.x = mPointX+ (float)(mRadius * Math.cos(stone.angle*Math.PI/180)); stone.y = mPointY+ (float)(mRadius * Math.sin(stone.angle*Math.PI/180)); } } /** * 计算第一个点的角度 * @param x * @param y * @return */ private int computeCurrentAngle(float x, float y) { float distance = (float)Math.sqrt(((x-mPointX)*(x-mPointX) + (y-mPointY)*(y-mPointY))); int degree = (int)(Math.acos((x-mPointX)/distance)*180/Math.PI); if(y < mPointY) { degree = -degree; } Log.d("RoundSpinView", "x:"+x+",y:"+y+",degree:"+degree); return degree; } @Override public boolean dispatchTouchEvent(MotionEvent event) { resetStonesAngle(event.getX(), event.getY()); computeCoordinates(); invalidate(); return true; } @Override public void onDraw(Canvas canvas) { canvas.drawPoint(mPointX, mPointY, mPaint); for(int index=0; index<STONE_COUNT; index++) { if(!mStones[index].isVisible) continue; drawInCenter(canvas, mStones[index].bitmap, mStones[index].x, mStones[index].y); //不想有红线,就注掉下面这句 // canvas.drawLine(mPointX, mPointY, mStones[index].x, mStones[index].y, mPaint); } } /** * 把中心点放到中心处 * @param canvas * @param bitmap * @param left * @param top */ void drawInCenter(Canvas canvas, Bitmap bitmap, float left, float top) { canvas.drawPoint(left, top, mPaint); canvas.drawBitmap(bitmap, left-bitmap.getWidth()/2, top-bitmap.getHeight()/2, null); } class BigStone { //图片 Bitmap bitmap; //角度 int angle; //x坐标 float x; //y坐标 float y; //是否可见 boolean isVisible = true; } }
代码里注释也很清楚。STONE_COUNT表示菜单的数目,可以设置为1到7,更大的数字需要图片支持,我只放了7张图片。
如果触摸的点不在圆周上,会自动计算出点到圆心的直线跟圆的交点,然后映射上去。
5个菜单的效果,画了线的:
6个菜单的效果:
Ok,代码也贡献出来。
- RoundSpinDemo.zip (114.8 KB)
- 下载次数: 1412
评论
15 楼
weich_java
2013-05-14
http://blog.csdn.net/weich_java/article/details/8924700
14 楼
weich_java
2013-05-14
chroya 写道
gmxstar 写道
Reizsoon 写道
琼露露 写道
怎么监听图片选中呢,想知道选中图片然后跳转到其他页面怎么做
同样的问题,求楼主赐教啊
同求啊
监听touch事件,取得当前按下的点坐标,判断坐标在哪个图片的范围之内即可。
去我的csdn空间,我修改总是从第一个绘制的bug并增加了click事件。
13 楼
weich_java
2013-05-14
廖星辰gogo 写道
楼主请问为何按下去旋转都是menu1的位置?
去我的csdn空间,我修改总是从第一个绘制的bug并增加了click事件。
12 楼
weich_java
2013-05-14
琼露露 写道
怎么监听图片选中呢,想知道选中图片然后跳转到其他页面怎么做
去我的csdn空间,我修改总是从第一个绘制的bug并增加了click事件。
11 楼
廖星辰gogo
2012-10-23
楼主请问为何按下去旋转都是menu1的位置?
10 楼
chroya
2012-08-22
eternallove1314520 写道
楼主你好 可以给我一份这个的代码吗?我的QQ邮箱306219744@qq.com 谢谢 最好是添加了图片的监听事件的 谢谢了
博文的最后已经把代码放出来了
9 楼
eternallove1314520
2012-08-20
楼主你好 可以给我一份这个的代码吗?我的QQ邮箱306219744@qq.com 谢谢 最好是添加了图片的监听事件的 谢谢了
8 楼
flyingsir_zw
2012-08-14
7 楼
shinsoft
2012-05-28
感謝樓主,偉大的人
6 楼
alienshooter01
2012-04-16
楼主好伟大 哈哈
5 楼
chroya
2011-12-31
gmxstar 写道
Reizsoon 写道
琼露露 写道
怎么监听图片选中呢,想知道选中图片然后跳转到其他页面怎么做
同样的问题,求楼主赐教啊
同求啊
监听touch事件,取得当前按下的点坐标,判断坐标在哪个图片的范围之内即可。
4 楼
gmxstar
2011-12-22
Reizsoon 写道
琼露露 写道
怎么监听图片选中呢,想知道选中图片然后跳转到其他页面怎么做
同样的问题,求楼主赐教啊
同求啊
3 楼
Reizsoon
2011-12-14
琼露露 写道
怎么监听图片选中呢,想知道选中图片然后跳转到其他页面怎么做
同样的问题,求楼主赐教啊
2 楼
琼露露
2011-03-15
怎么监听图片选中呢,想知道选中图片然后跳转到其他页面怎么做
1 楼
Coding.Ghost
2010-12-12
学习中..正需要这方面的资料..
发表评论
-
Android NFC内部机制分析
2012-08-06 19:48 3一、初始 一般需要使用nfc ... -
Android NFC简介
2012-08-03 11:31 4293目录: Android NFC ... -
Android放大镜的实现
2011-02-24 20:29 14240快三个月了没写博客了,因为工作调动,很多经验、心得都没 ... -
Android的3D旋转
2010-11-29 12:27 23107见过没有用opengl的3D动画,看了一下,是 ... -
让自己的Android应用支持appwidget
2010-11-26 13:25 7764经常看到一些教程教你如何写appwidget, ... -
ConditionVariable的用法
2010-11-07 21:35 8666线程操作经常用到wait和notify,用起来稍显 ... -
Android自定义长按事件
2010-11-06 20:34 44605Android系统自带了长按事件,setOnLongC ... -
Android获取应用程序的大小
2010-10-22 23:53 11199今天碰到个问 ... -
Android获取其他包的Context实例然后干坏事
2010-09-12 14:55 25068Android中有Context ... -
android监听文件和目录的创建删除移动等事件
2010-09-11 21:18 13622android.os下的FileObserver类 ... -
解决android自定义标题栏充满的问题
2010-09-10 15:27 10756一个接着一个的activity,写啊写,调啊调 ... -
Android中用AsyncTask简单实现多线程
2010-09-07 14:11 5173一般情况下在an ... -
Android自由选择TextView的文字
2010-09-02 15:47 19258用过EditText的都 ... -
NDK入门、提高和实战
2010-08-04 18:25 3255网上也有一些对NDK ... -
linux下用adb连接手机的问题解决
2010-08-02 16:17 5987在linux里面,模拟器可以直接识别,使用adb也 ... -
Android系统事件的recycle原理
2010-07-22 19:07 6217最近封装一些功能 ... -
Android画图之Matrix(二)
2010-07-15 22:01 33956上一篇Android画图之Matrix(一) 讲 ... -
Android画图之Matrix(一)
2010-07-13 22:54 32815Matrix ,中文里叫矩阵, ... -
Android画图之Bitmap(二)
2010-07-11 22:21 10771前面一篇博文Android画图之Bitma ... -
Android画图之Bitmap(一)
2010-07-11 19:51 15623最近写电子书 ...
相关推荐
Android圆盘旋转菜单实例,半圆形的组合菜单,会旋转,类似淘宝网客户端的圆形菜单,非常适合移动设备浏览的菜单,有兴趣可下载本Android菜单测试下。
android实现从底部滑出的半圆形菜单
CircleMenu是一个简单,优雅拥有圆形布局的菜单
主要为大家详细介绍了Android自定义半圆形圆盘滚动选择器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
android 右下角弹出1/4圆盘菜单的效果,默认只显示一个加号的图标,点击后动画弹出1/4圆形的两层菜单
圆形旋转的android菜单源代码
主要为大家详细介绍了Android学习教程之圆形Menu菜单操作代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
看到很强大的实例----高仿【优酷】圆盘旋转菜单 的实现 如何利用手机摄像头拍照 android 播放gif图片 DEMO Android图片浏览之源码 图片浏览器android源码下载 Android瀑布流加载图片效果实例 Android中利用...