之前在面试的时候被问到过一个问题,如何实现一个圆沿着一条线由大到小

当时回答的含糊不清,现在已经明白怎么去实现

关键点:Paint,path,canvas

一种方法

在activity中去控制圆的x,y坐标点 还有圆的直径。

在activity中写一个Timer 定时器,定时去绘制这个圆view。

圆view继承自view ,将变化接口暴露出去即可,重写onDrow函数,根据x y 轴重绘

上代码吧

public class ChangedCirclerView extends View {
private Paint mPaint;
private int BALL_SIZE; //圆的坐标
private int ballX;
private int ballY; public ChangedCirclerView(Context context){
super(context);
initView();
} public ChangedCirclerView (Context context,int mballX, int mballY){
super(context);
initView();
ballX = mballX;
ballY = mballY;
} public ChangedCirclerView(Context context, AttributeSet attributeSet){
super(context,attributeSet);
initView();
} private void initView(){
mPaint = new Paint();
} public void invalidateBall(int mBallX,int mBallY,int mBallRadiu) {
ballX = mBallX;
ballY = mBallY;
BALL_SIZE = mBallRadiu; invalidate();
} @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
} @Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setColor(Color.rgb(255,215,0));
mPaint.setAntiAlias(true); canvas.drawCircle(ballX,ballY,BALL_SIZE,mPaint); }
}

然后是acitivity  timer 控制代码

public class BallMoveActivity extends AppCompatActivity {
private Context context;
//小球初始的 X Y坐标点
private int baseX = 20;
private int baseY = 20;
private int baseRadiu = 10; //定义球的两个方位速度
private int xSpeed = 10;
private int ySpeed = 30;
private int radiuSpeed = 5; private int windowWidth ;
private int windowHight ; private int ON_DRAW = 0; private ChangedCirclerView circlerView; private FrameLayout frameLayout; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
frameLayout = (FrameLayout) findViewById(R.id.activity_main);getWindowXY();
getWindowXY(); initTimer();
} public void getWindowXY(){
WindowManager windowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
windowWidth = windowManager.getDefaultDisplay().getWidth();
windowHight = windowManager.getDefaultDisplay().getHeight();
} private void initTimer(){
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
baseX += xSpeed;
baseY += ySpeed;
baseRadiu += radiuSpeed; Log.v("xy==",String.valueOf(baseX)+"...."+baseY); Message message = new Message();
message.what = ON_DRAW;
handler.sendMessage(message);
}
},0,100);
} public Handler handler = new Handler(){ @Override
public void handleMessage(Message msg) {
if(msg.what == ON_DRAW){
if(circlerView == null){
circlerView = new ChangedCirclerView(context,baseX,baseY);
frameLayout.addView(circlerView);
} if(baseX > windowWidth || baseY >windowHight){
baseX = 20;
baseY = 20;
baseRadiu = 10;
} circlerView.invalidateBall(baseX,baseY,baseRadiu); }
}
}; }

这样就能根据x y 轴控制圆的位置,还有直径控制圆的大小了

方法二

还有一种方法就是动画的方式

需要一个圆的图形,可以是自己的Drawable图片,也可以是自己绘制的

然后编写动画代码,translate动画,scale动画,这样就能定义一个圆从哪里到哪里,然后圆的大小怎么变化这样的需求

圆的变化(自定义动画,及自定义UI)的更多相关文章

  1. Android中自定义View和自定义动画

    Android FrameWork 层给我们提供了很多界面组件,但是在实际的商业开发中这些组件往往并不能完全满足我们的需求,这时候我们就需要自定义我们自己的视图和动画. 我们要重写系统的View就必须 ...

  2. Android开发UI之自定义动画

    自定义动画,需要新建一个类,继承Animation类. 重写applyTransformation()方法和initialize()方法. applyTransformation(float inte ...

  3. UI设计篇·入门篇·简单动画的实现,透明动画/旋转动画/移动动画/缩放动画,混合动画效果的实现,为动画设置监听事件,自定义动画的方法

    基本的动画构成共有四种:透明动画/旋转动画/移动动画/缩放动画. 配置动画的方式有两种,一种是直接使用代码来配置动画效果,另一种是使用xml文档配置动画效果 相比而言,用xml文档写出来的动画效果,写 ...

  4. velocity自定义动画

         话说好久没有写博客了,零星的整理了一些东西,没有形成系统,所以也没有在这里记录.        废话不多说了,进入今天的正题.不知道大家是否记得之前写过的一篇文章<制作炫酷的专题页面& ...

  5. Android 5.0自定义动画

    材料设计中的动画对用户的操作给予了反馈,并且在与应用交互时提供了持续的可见性.材料主题提供了一些按钮动画和活动过渡,Android 5.0允许你自定义动画并且可以创建新的动画: Touch Feedb ...

  6. 用POP动画编写带富文本的自定义动画效果

    用POP动画编写带富文本的自定义动画效果 [源码] https://github.com/YouXianMing/UI-Component-Collection [效果] [特点] * 支持富文本 * ...

  7. [Android]Fragment自定义动画、动画监听以及兼容性包使用

    Fragment是Android在API 11之后加入的一个组件,对提高Android开发中的布局合理性和布局效率都有很大作用,尤其是在Android平板等大屏幕设备的开发中,Fragment的引入能 ...

  8. android 自定义动画

    android自定义动画注意是继承Animation,重写里面的initialize和applyTransformation,在initialize方法做一些初始化的工作,在applyTransfor ...

  9. [安卓] 18、一个简单的例子做自定义动画按钮和自定义Actionbar

    在做安卓UI的时候有时候需自定义具有动画效果的按钮或需要自定义一下actionbar~ 本节用一个简单的demo讲如何自定义具有动画效果的按钮,以及个性化的actionbar 下面是效果: 其中: △ ...

  10. AndroidUI 视图动画-自定义动画效果 (Animation)

    如果Android提供的四种动画 效果 和混合动画效果 不能够 满足需求的话,可以使用自定义动画效果 : 新建一个类CustomAnimation 使其继承自 android.view.animati ...

随机推荐

  1. ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined) A

    2018-02-19 A. Palindromic Supersequence time limit per test 2 seconds memory limit per test 256 mega ...

  2. 如何合并ts文件?

    答: 使用ffmpeg工具,使用方法如下: ffmpeg -i <m3u8 file name> <output file name> 注意:要先将m3u8文件中描述的ts文件 ...

  3. Mysql优化知识点总结(转自CS-Notes)

    转载地址:https://github.com/CyC2018/CS-Notes/blob/master/notes/MySQL.md 一.索引 B+ Tree 原理 MySQL 索引 索引优化 索引 ...

  4. Tomcat和weblogic虚拟路径的配置

    背景:上传的图片和web应用不在同个路径里,例如web应用在D盘,上传图片1.jpg在E:\upload\img目录里,这时就需要配置虚拟路径后,才能显示图片. Tomcat和WebLogic的不同配 ...

  5. P3412 仓鼠找sugar II

    思路 挺神的概率期望.. 好吧是我太弱了,完全没有往那里想 注意期望是具有线性性的,一条路径的期望可以变成每条边的期望求和 概率是某件事发生的可能性,期望是某件事确定发生的代价 首先没有终点的条件并不 ...

  6. (zhuan) Deep Deterministic Policy Gradients in TensorFlow

          Deep Deterministic Policy Gradients in TensorFlow AUG 21, 2016 This blog from: http://pemami49 ...

  7. 剥开比原看代码09:通过dashboard创建密钥时,前端的数据是如何传到后端的?

    作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchai ...

  8. 数据结构和算法with Python

    http://www.math.pku.edu.cn/teachers/qiuzy/ds_python/courseware/index.htm

  9. 常用模块(subprocess/hashlib/configparser/logging/re)

    一.subprocess(用来执行系统命令) import os cmd = r'dir D:xxx | findstr "py"' # res = subprocess.Pope ...

  10. 【Cucumber】【命令行】

    知识点 参考:https://www.cnblogs.com/worklog/p/5253297.html cucumber的命令行选项 首先查看命令行选项.和其它命令行工具一样,cucumber提供 ...