2013-09-22 67 views
0

我的應用程序包含在用戶說話時移動圖片。我已經這樣做了,但我現在想要做的是,我想爲我的應用程序設置一個圖像作爲背景。我正在使用畫布,正如您在下面的課程中所看到的那樣。那麼如何使用畫布設置背景而不影響畫面的移動。或者有沒有可能將這個類連接到一個可以定義背景的xml文件?將圖像設置爲背景android,使用canvas

在此先感謝

這裏是類:

package com.example.prova1; 


import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 

import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class MoveBalloon extends Activity { 
Bitmap balloon; 
DrawBalloon myView; 
float x,y,sensorX, sensorY; 
SensorManager sm; 
Microphone mic; 



public class DrawBalloon extends SurfaceView implements Runnable { 

SurfaceHolder ourHolder ; 
Thread ourThread = null; 
boolean isRunning=true; 

public DrawBalloon(Context context) { 
    super(context); 
    ourHolder= getHolder(); 
} 

public void pause() { 
    isRunning=false; 
    while(true){ 
    try{ 
    ourThread.join(); 
    } catch (InterruptedException e){ 
    e.printStackTrace(); 
    } 
    break; 
    } 
    ourThread=null; 
} 

public void resume(){ 
    isRunning=true; 
    ourThread = new Thread(this); 
    ourThread.start(); 


} 
@Override 
public void run(){ 
    while(isRunning){ 
    if(!ourHolder.getSurface().isValid()) 
    continue; 
      Canvas canvas = ourHolder.lockCanvas(); 

    updateMic(); 
    canvas.drawColor(Color.BLACK); 
    canvas.drawBitmap(balloon, sensorX, sensorY,null); 
    ourHolder.unlockCanvasAndPost(canvas); 
    } 
} 
} 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
/*sm= (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
if(sm.getSensorList(Sensor.TYPE_ACCELEROMETER).size()!=0){ 
    Sensor s = sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(o); 
    sm.registerListener(this,s ,SensorManager.SENSOR_DELAY_NORMAL); 
}*/ 
mic = new Microphone(); 
balloon = BitmapFactory.decodeResource(getResources(), R.drawable.images); 
sensorX=150; 
sensorY=350; 
//x=y=sensorX=sensorY=0; 
myView= new DrawBalloon (this); 
myView.resume(); 
setContentView(myView); 
} 



/*@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
// TODO Auto-generated method stub 

} 



@Override 
public void onSensorChanged(SensorEvent event) { 
// TODO Auto-generated method stub 
try { 
    Thread.sleep(20); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
sensorX=event.values[0]; 
sensorY=event.values[1]; 

} 

*/ 
public void updateMic(){ 
int level = mic.getLevel(); 

sensorY-=level; 
} 

@Override 
public void onBackPressed() { 


finish(); 


    } 


} 

回答

0

您可以使用,而不是設置內容視圖與Java對象的XML佈局:

setContentView(R.layout.move_balloon); 

,並添加自定義通過指定它的包位置在xml佈局中查看(DrawBalloon),並通過將圖像設置爲根元素的背景來更改背景:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MoveBalloon" 
    android:background="@drawable/ic_launcher" 
> 

    <com.example.prova1.MoveBalloon.DrawBalloon 
     android:id="@+id/drawBalloon1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="182dp" /> 

</RelativeLayout> 

,但這個工作,你的自定義視圖必須具有能夠在特殊的構造從XML佈局文件被誇大:

public DrawBalloon(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    ourHolder= getHolder(); 
} 
+0

我忘了說,你應該把你的自定義的背景顏色查看translparent: android:background =「#00000000」 – Turkish

+0

我嘗試你所說的,但我有錯誤膨脹類。 COM。我發佈了上面的logcat – user2804038

+0

我能做些什麼來避免這個錯誤?它似乎是在com.example.prova1.MoveBalloon.DrawBalloon中的exml文件中。我正在嘗試,但直到我沒有解決它。 – user2804038