Java中使用三角函数
2016-09-21 16:04
447 查看
通过一个简单的demo,学习三角函数的简单使用
注:使用三角函数的时候,不要直接Math.sin(x),这样是不对的,或者说,你传的30度,进去就不是30度了。要经过转换。详见代码
画一个播放用的view(一个圆,中间一个三角形)
1、效果图:
2、计算三角形坐标(拍的照片,有点模糊)
3、代码:
PlayIconView
4、布局文件中使用:
5、Activity:
注:使用三角函数的时候,不要直接Math.sin(x),这样是不对的,或者说,你传的30度,进去就不是30度了。要经过转换。详见代码
画一个播放用的view(一个圆,中间一个三角形)
1、效果图:
2、计算三角形坐标(拍的照片,有点模糊)
3、代码:
PlayIconView
package com.chen.demo; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.util.Log; import android.view.View; public class PlayIconView extends View { //圆的画笔 private Paint circlePaint; //圆的边 private Paint strokePaint; private int view_width; private int view_height; //三角形左上角点坐标 private double point_1_x; private double point_1_y; //三角形右下角点坐标 private double point_2_x; private double point_2_y; //三角形右侧点坐标 private double point_3_x; private double point_3_y; private Paint trianglePaint; private Path trianglePath; public PlayIconView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public PlayIconView(Context context) { super(context); init(); } public PlayIconView(Context context, AttributeSet attrs) { super(context, attrs); init(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); Log.e("chen", "onSizeChanged"); view_width = w; view_height = h; calculateCoordinate(); } /** * 计算坐标 */ private void calculateCoordinate() { point_1_x = (1 / 2d - 1 / (4 * Math.tan(60 * Math.PI / 180))) * view_width; point_1_y = view_width / 4d; point_2_x = point_1_x; point_2_y = view_width * 3 / 4d; point_3_x = (1 / 2d + 1 / (4 * Math.sin(60 * Math.PI / 180))) * view_width; point_3_y = view_height / 2d; trianglePath.moveTo((float) point_1_x, (float) point_1_y); trianglePath.lineTo((float) point_2_x, (float) point_2_y); trianglePath.lineTo((float) point_3_x, (float) point_3_y); trianglePath.close(); } /** * 初始化 */ private void init() { //背景圆画笔 circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); circlePaint.setStyle(Paint.Style.FILL); circlePaint.setColor(0x33000000); //圆边画笔 strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); strokePaint.setStyle(Paint.Style.STROKE); strokePaint.setStrokeWidth(1); strokePaint.setColor(0xccffffff); //三角形画笔 trianglePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); trianglePaint.setStyle(Paint.Style.FILL); trianglePaint.setColor(0xffffffff); //闭合区间路径 trianglePath = new Path(); } @Override protected void onDraw(Canvas canvas) { canvas.drawCircle(view_width / 2f, view_height / 2f, view_width / 2f, circlePaint); canvas.drawCircle(view_width / 2f, view_height / 2f, view_width / 2f - 1, strokePaint); canvas.drawPath(trianglePath, trianglePaint); } }
4、布局文件中使用:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@mipmap/ic_launcher" > <com.chen.demo.PlayIconView android:id="@+id/play_icon" android:layout_width="40dp" android:layout_height="40dp" android:layout_centerInParent="true" /> </RelativeLayout>
5、Activity:
package com.chen.demo; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class MainActivity extends Activity { private PlayIconView play_icon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); play_icon = (PlayIconView) findViewById(R.id.play_icon); } }
相关文章推荐
- 2 weekend110的SecureCRTPortable远程连接 + 上传安装jdk + 上传安装配置hadoop
- JAVA多线程(三)模式-Single Threaded Execution
- maven eclipse 运行报错
- 单个文件或图片上传(java)
- Web Service (二) CXF自动发布Web Service(No Spring)
- Spring mvc config
- Eclipse 快捷键 mac
- Web Service (四) 手动发布Web Service接口-CXF与Spring集成(实战)
- java Integer的值比较
- 关于元数据中的#和$
- JSON总结(java篇)
- spring aop概念理解
- Java Service Wrapper设置日志(按天生成日志文件)
- Spring Boot 2 Swagger2
- SpringMVC 入门浅谈
- Java基础:面向对象三大特征、五大原则
- java并发编程之Synchronized关键字
- 关于java程序创建包,如何编译该程序?
- java:方法的虚分派(virtual dispatch)和方法表(method table)
- Java 异常浅谈