나는이 "정확한"문제에 봉착 : 나는 플레이어, 원수가SurfaceView에서 하드웨어 가속을 비활성화하는 방법은 무엇입니까?
setShadowLayer Android API differences
을, 나는 14 API를 사용하여 컴파일하고 있습니다. 문제는 : 14 API on에서 하드웨어 가속이 기본적으로 사용되며 모든 그리기 방법에서 지원되지 않습니다 (예 : 사용하려는 setShadowLayer()). 따라서 솔루션은 위 주제에서 제시된 것과 같이 간단합니다. 문제는 : 그는 View를 사용하고 더 나은 게임 성능을 위해 SurfaceView를 사용합니다.
public class Screen extends SurfaceView implements Runnable { // Code }
그래서, 난 그냥 생성자에 추가 : 내 표면보기는 다음과 같이 선언 된 내 그림자가 uggly 보지 만들기 위해
public Screen(Context context) {
super(context);
holder = getHolder();
setLayerType(View.LAYER_TYPE_SOFTWARE, null); // Here.
}
내 서피스 뷰 SurfaceView에 하드웨어 가속을 사용하지 않으려면, 그리고 결과 : 전체 SurfaceView가 작동을 멈 춥니 다. 무슨 일이 일어나는지 보여줄 수는 없지만 하드웨어 가속을 사용하지 않으면 아무것도 그려지지 않습니다. SurfaceView 자체는 하드웨어 가속에 달려 있지만 캔버스는 그릴 때 그 그림자가 제대로 작동하지 않을 수 있기 때문에 나는 이것에 대해 매우 비관적입니다.
소프트웨어 렌더링을 사용하는 경우 특히 현대 장치에서 많은 성능을 포기합니다. 어쨌든, SurfaceView 표면의 가속을 불가능하게하는 것은 가능하지 않을 수 있습니다 - http://developer.android.com/guide/topics/graphics/hardware-accel.html에서 윈도우에 대한 가속을 비활성화 할 수 없다고 말합니다 . 전체 활동이나 앱에 대한 가속을 사용 중지 해 보셨습니까? – fadden
예, 그 부분도 사용해 보았습니다. 그것은 쓸모가 없었습니다. 그림자는 여전히 험악했습니다. 나는 그림자 품질을 포기하고 google이 그것을 고칠 때까지 기다리기로 결정했다. –
이전에 작성하신 의견이 잘못되었습니다. @ shelll의 답변에서 언급했듯이, lockView (Surface)의 Surface에서 얻은 캔버스는 하드웨어 가속이 아닙니다. – fadden