我在我的布局xml中定义了自定义SurfaceView。我可以画到画布没有扩展SurfaceView的关联外部类的问题。然而,我的目标是绘制一个初始状态(让它的状态为0)到画布上,这是一些带有白色背景的文字,并且在按下某个事件(例如按下按钮)之后,绘制图像(让它称为状态1)同一幅画布。另外,我可以将这两种状态都绘制到同一个画布上,但是当发生事件时,我很难更改画布的状态。Android:在两个状态之间更新自定义Surfaceview画布
也可能有另一种方法来做到这一点,也许在顶部创建一个覆盖视图,并在按钮上按编程方式调用它。
这里是我的细节:XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#FFFFFFFF"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_height="wrap_content"
android:layout_marginLeft= "5dp"
android:layout_marginTop = "5dp"
android:layout_marginBottom = "5dp"
android:id="@+id/textNoisy"
android:layout_width="fill_parent"
android:text="@string/TextNoisy"
android:textColor="#161616"></TextView>
<com.speechenhancer.SpecGuageNoisy
android:id="@+id/SpecGuageNoisy"
android:layout_width="fill_parent"
android:layout_height="220dp"
android:layout_below="@+id/textNoisy"/>
<TextView android:layout_height="wrap_content"
android:layout_marginLeft= "5dp"
android:layout_marginBottom = "5dp"
android:id="@+id/textEnhanced"
android:layout_below="@+id/SpecGuageNoisy"
android:layout_width="wrap_content"
android:text="@string/TextEnhanced"
android:textColor="#161616"></TextView>
<Button android:id="@+id/ButtonEnhance"
android:layout_marginTop = "20dp"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:text="@string/ButtonEnhance"
android:layout_alignParentBottom="true"
android:layout_gravity="center" ></Button>
主要活动
public class SpecGuageNoisy extends SurfaceView implements SurfaceHolder.Callback {
public SpecGuageNoisy(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
holder = getHolder();
holder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (SpecState.getCanvasState()==0){
// Draw Initial state
}else if (SpecState.getCanvasState()==1){
spectrum = init();
canvas = getHolder().lockCanvas();
canvas.drawColor(Color.WHITE);
onDraw(canvas,spectrum, nsegs, seglen,nshift);
getHolder().unlockCanvasAndPost(canvas);
}
}
自定义SurfaceView:
public class SpecGuageNoisy extends SurfaceView implements SurfaceHolder.Callback {
public SpecGuageNoisy(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
holder = getHolder();
holder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (SpecState.getCanvasState()==0){
// Draw Initial state
}else if (SpecState.getCanvasState()==1){
spectrum = init();
canvas = getHolder().lockCanvas();
canvas.drawColor(Color.WHITE);
onDraw(canvas,spectrum, nsegs, seglen,nshift);
getHolder().unlockCanvasAndPost(canvas);
}
}
}
在这段代码中我没有表现出拉丝状态0也没有尝试设置Onlick侦听器到ButtonEnhance。我还没有显示onDraw函数,因为它运行良好。我刚把它粘贴在这里来说明我的设置。我没有收到任何报告logcat信息的错误。更重要的是,我需要一些帮助来制定如何实现这种特殊情况。有任何想法吗?谢谢
奇怪你会提到它,因为我已经从一个多线程的方式转换回线性的方法,因为我认为这可能是更容易。我已经实现了与该链接的着陆页上的内容类似的内容,但仍然存在相同的问题。无法在两种状态之间转换。 – digiphd
指向教程的链接已损坏 – Ravi