具体代码如下所示:
//MyCircleView类
public class MyCircleView extends View{
//当前画笔画圆的颜色
private int CurrenCircleBoundColor;
private Paint paint;
////从xml中获取的颜色
private int circleBundColor;
private float circleBoundWidth;
private float pivotX;
private float pivotY;
private float radius=130;
private float currentDegree=0;
private int currentSpeed=1;
private boolean isPause=false;
public MyCircleView(Context context) {
super(context);
initView(context);
}
public MyCircleView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView(context);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCircleView);
for (int i = 0; i < typedArray.getIndexCount(); i++) {
//就是我们自定义的属性的资源id
int attr = typedArray.getIndex(i);
switch (attr){
case R.styleable.MyCircleView_circlr_bound_color:
circleBundColor = typedArray.getColor(attr, Color.RED);
CurrenCircleBoundColor=circleBundColor;
break;
case R.styleable.MyCircleView_circlr_bound_width:
circleBoundWidth = typedArray.getDimension(attr, 3);
break;
}
}
}
public MyCircleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
private void initView(Context context){
paint = new Paint();
}
public void setColor(int color){
if (CurrenCircleBoundColor!=color){
CurrenCircleBoundColor=color;
}else {
CurrenCircleBoundColor=circleBundColor;
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setAntiAlias(true);
paint.setColor(CurrenCircleBoundColor);
paint.setStrokeWidth(circleBoundWidth);
paint.setStyle(Paint.Style.STROKE);
pivotX = getWidth() / 2;
pivotY = getHeight() / 2;
canvas.drawCircle(pivotX,pivotY,radius,paint);
canvas.save();
//旋转画布 , 如果旋转的的度数大的话,视觉上看着是旋转快的
canvas.rotate(currentDegree,pivotX,pivotY);
//提供了一些api可以用来画线(画路径)
Path path = new Path();
//从哪开始画 从A开始画
path.moveTo(pivotX+radius,pivotY);
//从A点画一个直线到D点
path.lineTo(pivotX+radius-20,pivotY-20);
//从D点画一个直线到B点
path.lineTo(pivotX+radius,pivotY+20);
//从B点画一个直线到C点
path.lineTo(pivotX+radius+20,pivotY-20);
//闭合 -- 从C点画一个直线到A点
path.close();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLACK);
canvas.drawPath(path,paint);
canvas.restore();
//旋转的度数一个一个度数增加, 如果乘以一个速度的话,按一个速度速度增加
currentDegree+=1*currentSpeed;
if (!isPause){
invalidate();
}
}
public void speed(){
++currentSpeed;
if (currentSpeed>=10){
currentSpeed=10;
Toast.makeText(getContext(),"我比闪电还快",Toast.LENGTH_SHORT).show();
}
}
public void slowDown(){
--currentSpeed;
if (currentSpeed<=1){
currentSpeed=1;
}
}
public void pauseOrStart(){
//如果是开始状态的话去重新绘制
if (isPause){
isPause=!isPause;
invalidate();
}else {
isPause=!isPause;
}
}
}
//主页面
public class MainActivity extends AppCompatActivity {
//全局变量
private MyCircleView my_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
my_view = (MyCircleView) findViewById(R.id.my_view);
}
public void onClick(View view){
my_view.setColor(Color.BLUE);
}
public void add(View view){
my_view.speed();
}
public void slow(View view){
my_view.slowDown();
}
public void pauseOrStart(View view){
my_view.pauseOrStart();
}
}
主页面布局
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.lx_20170928.MainActivity">
<Button
android:id="@+id/set_color_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:onClick="onClick"
android:text="设置颜色" />
<Button
android:id="@+id/add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/set_color_btn"
android:layout_centerHorizontal="true"
android:onClick="add"
android:text="加速" />
<Button
android:id="@+id/slow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/add"
android:layout_centerHorizontal="true"
android:onClick="slow"
android:text="减速" />
<Button
android:id="@+id/pause_or_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/slow"
android:layout_centerHorizontal="true"
android:onClick="pauseOrStart"
android:text="暂定/开始" />
<com.example.lx_20170928.MyCircleView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/my_view"
android:layout_centerInParent="true"
app:circlr_bound_color="@color/colorAccent"
app:circlr_bound_width="3dp"
/>
</RelativeLayout>
//在values建一个attrs.xml
<resources>
<declare-styleable name="MyCustomCircleArrowView">
<attr name="circlr_bound_width" format="dimension"></attr>
<attr name="circlr_bound_color" format="color"></attr>
</declare-styleable>
</resources>
效果图如下所示:
总结
以上所述是小编给大家介绍的Android自定义View实现箭头沿圆转动实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# 自定义
# view
# 箭头沿圆转动
# Android自定义ViewGroup实现带箭头的圆角矩形菜单
# 所示
# 小编
# 看着
# 在此
# 给大家
# 所述
# 我比
# 给我留言
# 感谢大家
# 可以用来
# 还快
# 疑问请
# 有任何
# 全局变量
# 画线
# MyCircleView_circlr_bound_width
# getDimension
# RED
# break
相关文章:
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
英语简历制作免费网站推荐,如何将简历翻译成英文?
完全自定义免费建站平台:主题模板在线生成一站式服务
太原网站制作公司有哪些,网约车营运证查询官网?
全景视频制作网站有哪些,全景图怎么做成网页?
如何在香港服务器上快速搭建免备案网站?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何通过PHP快速构建高效问答网站功能?
设计网站制作公司有哪些,制作网页教程?
如何通过老薛主机一键快速建站?
如何快速使用云服务器搭建个人网站?
Swift中switch语句区间和元组模式匹配
建站之星代理平台如何选择最佳方案?
如何实现建站之星域名转发设置?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何确保FTP站点访问权限与数据传输安全?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在IIS管理器中快速创建并配置网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
企业微网站怎么做,公司网站和公众号有什么区别?
如何在Windows虚拟主机上快速搭建网站?
建站之星如何保障用户数据免受黑客入侵?
如何用免费手机建站系统零基础打造专业网站?
焦点电影公司作品,电影焦点结局是什么?
,想在网上投简历,哪几个网站比较好?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何通过西部建站助手安装IIS服务器?
如何快速查询网址的建站时间与历史轨迹?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
如何访问已购建站主机并解决登录问题?
内部网站制作流程,如何建立公司内部网站?
如何快速查询网站的真实建站时间?
如何在Ubuntu系统下快速搭建WordPress个人网站?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
建站之星如何快速更换网站模板?
简单实现Android验证码
如何通过万网虚拟主机快速搭建网站?
,网站推广常用方法?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
山东云建站价格为何差异显著?
如何快速搭建高效可靠的建站解决方案?
如何高效利用亚马逊云主机搭建企业网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。