全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android自定义View实现箭头沿圆转动实例代码

具体代码如下所示:

//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小时内与您取得联系。