为什么Canvas会覆盖Android Studio中的所有其他内容?

时间:2015-05-20 10:17:35

标签: java android canvas android-studio

所以我尝试使用Canvas在Android Studio中绘制一条线。为了绘制一条简单的线,您需要使用

定义contentView
setContentView(R.id.activity_main);

我似乎无法在ImageViews或TextViews之间进行组合,它们只是相互覆盖。

为了获得绘制的线条,我需要将contentView更改为

setContentView(DrawView);

如果我这样做,我所有的其他事情都会消失。

以下是我的2个文件:

MainActivity:

 public class MainActivity extends Activity {

    DrawView drawLine;
    ImageView view;
    SeekBar seekBar;
    DrawView drawView;

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        drawView = new DrawView(this);
        drawView.setBackgroundColor(Color.WHITE);
        setContentView(drawView);
        view.setZ(-1);
        SeekBar seekBar = (SeekBar)findViewById(R.id.seekBar);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            int progressChanged = 0;
            TextView text = (TextView)findViewById(R.id.textView);
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                progressChanged = progress;
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                text.setText("Progress: " + progressChanged);
            }
        });

    }
}

drawView函数:

public class DrawView extends View {

Paint paint = new Paint();
ImageView view = (ImageView)findViewById(R.id.imageView);
SeekBar seekBar = (SeekBar)findViewById(R.id.seekBar);
TextView text = (TextView)findViewById(R.id.textView);

public DrawView(Context context) {
    super(context);
    paint.setColor(Color.BLACK);
}

@Override
public void onDraw(Canvas canvas) {
    canvas.drawLine(0, 0, 20, 20, paint);
    canvas.drawLine(20, 0, 0, 20, paint);
}

}

如何将TextViews和/或ImageViews与画布结合使用?

1 个答案:

答案 0 :(得分:0)

  

为了绘制一条简单的线,您需要使用

定义contentView

不一定。

  

为了获得绘制的线条,我需要将contentView更改为

不一定。

  

如何将TextViews和/或ImageViews与画布结合使用?

步骤1:在DrawView上实现双参数构造函数,该构造函数需要ContextAttributeSet

步骤2:在包含ImageViewsTextViews的布局资源文件中,包含DrawView。请注意,您需要在XML元素名称中使用完全限定的类名(例如,com.eriklann.android.DrawView)。