月月月熊~ 2021-09-15 21:42 采纳率: 75%
浏览 53
已结题

Android canvas 想做出一个起点变化 终点不变的线的效果 代码可以运行 模拟器没显示

这是activity—main.xml里的

<LinearLayout
        android:id="@+id/wang"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></LinearLayout>

这是MainActivity.java里的

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init() {
        LinearLayout layout = (LinearLayout)findViewById(R.id.wang);
        final CustomView view=new CustomView(this);
        layout.addView(view);

    }
}

这是CustomView.java里的

public class CustomView extends View {
    private int x,y,nextX,nextY;
    public CustomView(Context context) {
        super(context);
    }
    public CustomView(Context context,int x,int y,int nextX,int nextY){
      super(context);
        this.x=x;
        this.y=y;
        this.nextX=nextX;
        this.nextY=nextY;
        init();
    }
    private void init(){
        Paint paint = new Paint(); //设置一个笔刷大小是3的黄色的画笔
        paint.setColor(Color.RED);
        paint.setStrokeJoin(Paint.Join.ROUND);//设置线段连接处样式
        paint.setStrokeCap(Paint.Cap.ROUND);//设置线冒样式,取值有Cap.ROUND(圆形线冒)、Cap.SQUARE(方形线冒)、Paint.Cap.BUTT(无线冒)
        paint.setStrokeWidth(10f);
        paint.setAntiAlias(true);

        ValueAnimator valueAnimatorX =ValueAnimator.ofInt(x,nextX);
        valueAnimatorX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){
              public void onAnimationUpdate(ValueAnimator animation){
                nextX=x;
                invalidate();
            }
        });
        ValueAnimator valueAnimatorY=ValueAnimator.ofInt(y,nextY);
        valueAnimatorY.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){
               public void onAnimationUpdate (ValueAnimator animation){
                 nextY = y + 10;
                 invalidate();
    }
    });

        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.setDuration(2000);
        animatorSet.start();
    }
    Paint paint;
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    //canvas.drawColor(Color.WHITE);
       // canvas.drawLine(500 , 70, 200, 500, paint);//from x,y to x,y
        canvas.drawLine(nextX,nextY,200,500,paint);
    }
}

不知道为什么不对 感谢大家看一下

img

  • 写回答

2条回答 默认 最新

  • 楚江临 2021-09-16 09:54
    关注

    这个地方不对 final CustomView view=new CustomView(this);
    layout.addView(view);
    这里你调用的构造方法不对,直接走到了 public CustomView(Context context) {
    super(context);
    }
    这样你的 Paint paint; 没有进行初始化,空指针报错, 如果用另外一个构造方法也会报空指针异常。Paint paint = new Paint() 这个初始化的是局部变量,你在onDra调用的是全局的paint, 但是全局paint没有初始化。将Paint paint = new Paint();改为 paint = new Paint(); 使用第二个构造方法进行初始化。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月26日
  • 已采纳回答 9月18日
  • 创建了问题 9月15日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。