SurfaceView現在、個人用およびダブル バッファリングを使用して、Android アプリを開発しています。ただし、コードで少し問題に直面しています。一方で、階層
に基づく xml ビューがあります。アクティビティをインスタンス化するとき、この xml にLinearLayoutmy を設定します。contentView問題は、ダブルバッファリングが機能しなくなったことです。スレッドは実行中ですが、何も表示されません。
一方、contentView新しい個人的なSurfaveView要素を設定すると、ディスプレイは正常に動作します。しかしもちろん、 my の他の要素にはもうアクセスできませんLinearLayout。
実際、私はcontentView自分の xml ビューを設定し、ディスプレイを機能させ続けたいと思っています。
私は十分に明確だったと思います、あなたの答えをありがとう!
ここに私の活動があります:
public class MainController extends Activity {
@Override
protected void onCreate(final Bundle p_savedInstanceState) {
super.onCreate(p_savedInstanceState);
setContentView(R.layout.main_controller_activity);
this.drawableView = (MCustomDrawableView) findViewById(R.id.drawingBox);
...
}
...
}
私の表面ビュー:
public class MCustomDrawableView extends SurfaceView {
public MCustomDrawableView(Context p_context, AttributeSet p_attributes) {
super(p_context, p_attributes);
this.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(final SurfaceHolder p_holder) {
try {
// Instantiating a new thread
thread = new MBufferingThread(getInstance());
thread.start();
} catch (Exception exception) {
exception.printStackTrace();
}
}
@Override
public void surfaceChanged(final SurfaceHolder p_holder, int p_format, int p_width, int p_height) {...}
@Override
public void surfaceDestroyed(final SurfaceHolder p_holder) {...}
});
// Setup drawing options
setupDrawing();
}
...
}
そして私のxmlビュー:
<LinearLayout 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"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@color/app_background"
tools:context=".MainController">
<com.iskn.calligraphy.models.draw.MCustomDrawableView
android:id="@+id/drawingBox"
style="@style/DrawingBox" />
<SeekBar
android:id="@+id/brushSize"
style="@style/SizeSeekBar" />
<SeekBar
android:id="@+id/brushOpacity"
style="@style/OpacitySeekBar" />
</LinearLayout>
編集:
さらなる調査と分析の後、次のことが明らかになりました。
setContentView(R.layout.main_controller_activity): この場合、アクティビティからすべての要素を取得しますが、MCustomDrawableView何も表示されません。setContentView(new MCustomDrawableView(getApplicationContext())):その場合、MCustomDrawableViewうまく機能しています(必要なものが表示されます)が、他のものはありませViewんmain_controller_activity
両方の場合において:
- 私のスレッドは実行されており、うまく機能しています。
holder.lockCanvas()およびメソッドを使用して、私の描画関数も呼び出されholder.unlockCanvasAndPost(bufferCanvas)ます。