Холст не показывает изображение /Drawable
Я делаю работу над SVG Paths и Image. Я загрузил файл SVG, получил изображение и попытался установить его на холсте. Но холст не показывает изображение. Я проверяю высоту и ширину, а также проверяю нулевое значение этого изображения / рисунка, и оно не равно нулю, поэтому я не могу понять, почему холст не отображает изображение. любая помощь
Мой код:
public class MainActivity extends Activity{
Context c;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
c=getApplicationContext();
setContentView(new GameView(this));
}
public class GameView extends View{
private int width, height;
private long svgId;
Picture picture;
long startTime;
float scaleFactor;
public GameView(Context context) {
super(context);
SVG svg = SVGParser.getSVGFromResource(getResources(),R.raw.android);
picture = svg.getPicture();
}
@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
// get visible area
width = right - left;
height = bottom - top;
}
@Override
public void onDraw(Canvas canvas) {
// paint a white background...
canvas.drawColor(Color.BLACK);
if (canvas!=null)
{
Toast.makeText(c, "yahooooooooooooooooo"+picture.getHeight(), Toast.LENGTH_LONG).show();
scaleFactor=Math.min((float)getHeight()/picture.getHeight(),(float)getWidth()/picture.getWidth());
canvas.scale((float)scaleFactor,(float)scaleFactor);
canvas.drawPicture(picture);
}
}
}
}
2 ответа
Это то, что я использую, чтобы вернуть нарисованный объект, который я буду использовать во всех моих приложениях
Это работает довольно хорошо.
final BitmapDrawable getSVG_Drawable
(int svgResourceID, int width, int height)
{
// Get a Picture from the SVG in res/raw.
final SVG vector =
SVGParser.getSVGFromResource(getResources(), svgResourceID);
final DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
// Redraw the picture to a new size.
final Bitmap bmp =
Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas cnv = new Canvas(bmp);
cnv.setDensity((int) (metrics.xdpi));
cnv.drawPicture(vector.getPicture(), new Rect(0, 0, width, height));
final BitmapDrawable drw = new BitmapDrawable(getResources(), bmp);
// Return the drawable.
return drw;
}
Существует известная проблема с svg-android, из-за которой при определенных изображениях аппаратное ускорение может фактически привести к тому, что изображение не будет отображаться. Я не уверен в точных обстоятельствах того, что вызывает это, но я знаю, что это случилось со мной, как я задокументировал в этом вопросе. Ключ должен отключить аппаратное ускорение для просмотра. В зависимости от того, к чему вы стремитесь, вам, возможно, не понадобится делать что-то столь же причудливое, как я (Android 3.0+ не нужно проверять версию сборки), но вот ключевая часть. Добавьте код, который я включил в конструктор, в свой конструктор, затем добавьте disableHardwareAcceleration
немного
public GameView(Context context,AttributeSet attrs) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
disableHardwareAcceleration();
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void disableHardwareAcceleration()
{
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}