首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AlertDialog与TextView -不能使用textView.setText方法

AlertDialog与TextView -不能使用textView.setText方法
EN

Stack Overflow用户
提问于 2018-01-06 18:44:40
回答 2查看 51关注 0票数 1

我试图用自定义视图绘制一个延迟抛物线。到目前为止,我已经了解到我需要使用@重写onDraw方法,但是1.我不能使抛物线离散,我不知道如何编程,以便逐步创建形状(延迟)。

我还需要在点击按钮后画出来,这对我来说是另一个复杂的问题。现在我正试着一步一步地画一条简单的线,但是这个片段不起作用:

代码语言:javascript
复制
@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(path, paint);

        int x1 = 10;
        int x2 = 100;
        int y1 = 10;
        int y2 = 100;
        int diff = x2-x1;

        for (int i = 0; i<diff; i++){
            canvas.drawLine(x1, y1, x1+1, y1+1, paint);
            x1++;
            y1++;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-06 19:39:04

我可以给你一些技巧,但请你自己完成它。

您必须使用计时器来刷新您的组件,如果使用这个,它将每100 it刷新一次"onDraw“。

代码语言:javascript
复制
private Handler handler = new Handler();
private Runnable AlarmRunnable = new Runnable() {
    @Override
    public void run() {
        handler.postDelayed(this, 100);
        invalidate();
    }
};

定义全局变量而不是本地变量。

代码语言:javascript
复制
int cc = 0;
int x1 = 10;
int x2 = 100;
int y1 = 10;
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);


    if (cc++ > 100) // STOP HANDLER AFTER COUNTER GETS DONE 
        handler.removeCallbacks(AlarmRunnable);


    System.out.println("CC:" + cc);
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStrokeWidth(lineWidth);
    paint.setColor(Color.WHITE);

    for (int i = 0; i<cc; i++){
    canvas.drawLine(x1, y1, x1 + 1, y1 + 1, paint);
    x1++;
    y1++;

    }

}

在构造器中启动手柄

代码语言:javascript
复制
 public YOURCOMPONENT(Context context, AttributeSet attrs) {
    super(context, attrs);
    handler.post(AlarmRunnable);
 ....
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-06 19:35:53

呈现离散抛物线

至于画一个离散的抛物线,你应该画点(或圆点的半径大小,但以点为中心)沿着不同的x和y坐标,有更大的步长。

例如,您可以通过在以下(x,y)点绘制一个步长为1的x=-1x=1的抛物线:(-1, 0), (0, 4), (1, 0)

你应该确保你在你的图形上缩放你的x轴的方式,是在点之间有超过一个像素的距离,使它看起来是离散的。

动画onDraw

无论onDraw中的绘图逻辑是否正确,您都要在UI回调上使用Thread.sleep()运行长时间操作,这是错误的做法。

因为您是在onDraw的一个调用中绘制整个抛物线,所以我假设整个图像是一次呈现,而不是动画。

查看一个similar question,您应该创建另一个线程,负责自定义视图的呈现循环,以创建一个绘制每个帧的动画。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48130655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档