我是图形和表面视图等新手。我听说最好在单独的线程上绘制而不是在主线程上绘制。我有2个活动,一个是使用提取视图绘制的,另一个是使用表面视图。两者都有相同的绘图代码。然而,即使在最大alpha设置(255),后者也会产生更暗的背景颜色。如果我注释掉drawargb线,我会得到一个黑色的背景。我尝试过很多东西,比如设置surfaceview对象的背景颜色,将pixelformat设置为rgb888或透明,但这些都不起作用。以下是代码:
SurfaceHolder ourHolder;Boolean isRunning=true;
Thread ourThread;ArrayList<Float> amtint=new ArrayList();float max;
String names[];String company;
public GraphSview(Context c) {
super(c);
ourHolder=getHolder();
ourThread=new Thread(this);
ourThread.start();}
public void pause(){
isRunning=false;
while(true){try {
ourThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}break;}ourThread=null;
}
public void Resume()
{
isRunning=true;
ourThread=new Thread(this);
ourThread.start();}
@Override
public void run() {
// TODO Auto-generated method stub
while(isRunning){
if(!ourHolder.getSurface().isValid())continue;
Canvas canvas=ourHolder.lockCanvas();
canvas.drawARGB(255, 33, 181, 238);
.... ourHolder.unlockCanvasAndPost(canvas);
主要活动的代码是
public class GraphS extends Activity{
GraphSview ourSview;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
ourSview=new GraphSview(this);
ourSview.getHolder().setFormat(PixelFormat.TRANSPARENT);
setContentView(ourSview);
//ourSview.setBackgroundColor(0Xffffffff);
}
@Override
protected void onPause() {
ourSview.pause();
super.onPause();
}
@Override
protected void onResume() {
ourSview.Resume(); // TODO Auto-generated method stub
super.onResume();
}
}
代码有问题吗? 有没有其他方法来创建和显示除表面视图以外的图形?