Intereting Posts
Как обращаться с кнопкой, нажатой на Android? Подсказки SearchView не отображаются для одиночного символа Как исправить eror app \ build \ intermediates \ res \ merged \ debug \ values-v24 \ values-v24.xml Очистить содержимое WebView Достигнутый размер MAX для кэша операторов compiled-sql для базы данных Как предоставить различный доступ к пользователю разных типов для входа в Firebase? Что происходит, когда приложение падает? Intent.ACTION_HEADSET_PLUG принимается, когда начинается действие Видеовидео и Полноэкранные и Ориентационные изменения – Android AdMob – «Недопустимый или несуществующий URL приложения» при создании объявления Не удается запустить приложение через Android Studio (logcat ) InDict Усталость в android N Android Studio – как я могу сделать AVD с ARM вместо HAXM? Что такое инструменты: макет в файле фрагмента xml? Почему я получаю Некоторое хрустение файла не удалось после того, как я переименовал файл с возможностью рисования в .9.png?

Размещение объектов во время рисования / макета?

Я получаю 3 предупреждения для размещения объектов во время рисования / макета

super.onDraw(canvas); canvas.drawColor(Color.WHITE); Paint textPaint = new Paint(); textPaint.setARGB(50,100,100,250); textPaint.setTextAlign(Align.CENTER); textPaint.setTextSize(50); textPaint.setTypeface(font); canvas.drawText("Logan is awesom",canvas.getWidth()/2,200,textPaint); canvas.drawBitmap(pBall, (canvas.getWidth()/2), changingY, null); if (changingY <canvas.getHeight()){ changingY += 10; }else{ changingY=0; } Rect middleRect = new Rect(); middleRect.set(0, 400, canvas.getWidth(), 550); Paint ourBlue = new Paint(); ourBlue.setColor(Color.BLUE); canvas.drawRect(middleRect, ourBlue); 

Я получаю сообщение об ошибке на новом Rect (); И на обеих новых Paint ();

Точная ошибка заключается в том, чтобы избежать распределения объектов во время операций рисования / компоновки (вместо этого использовать prelocate и повторное использование)

Solutions Collecting From Web of "Размещение объектов во время рисования / макета?"

Ну, ваша «ошибка» указывает на точную проблему. onDraw() вызывается операционной системой много раз, поэтому выделение чего-то внутри этой функции – крайне плохая идея. Вам необходимо заранее выделить Rect и Paint и просто использовать их в onDraw

 class YourClass extends View { Rect middleRect; Paint ourBlue; Paint textPaint; public YourClass() { //constructor init(); } private void init() { middleRect = new Rect(); ourBlue; = new Paint(); textPaint = new Paint(); ourBlue.setColor(Color.BLUE); textPaint.setARGB(50,100,100,250); textPaint.setTextAlign(Align.CENTER); textPaint.setTextSize(50); textPaint.setTypeface(font); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.WHITE); canvas.drawText("Logan is awesom",canvas.getWidth()/2,200,textPaint); canvas.drawBitmap(pBall, (canvas.getWidth()/2), changingY, null); if (changingY <canvas.getHeight()){ changingY += 10; }else{ changingY=0; } //if canvas size doesn't change - this can be moved to init() as well middleRect.set(0, 400, canvas.getWidth(), 550); canvas.drawRect(middleRect, ourBlue); } } 

Для меня у меня есть эта ошибка в макете, особенно при использовании показательных метриков.

Я использовал это изображение:

  <com.steve.thirdparty.ScalableImageView android:id="@+id/iv_posted_img_home" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitXY" android:background="@drawable/golive_load_image" android:layout_below="@+id/tv_user_posted_msg_post_items_home" android:contentDescription="@string/cont_desc"/> 

ScalableImageView.java:

Import static com.steve.TabHomeActivity.displaymetrics;

 public class ScalableImageView extends ImageView { ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); } 

Я решил эту проблему, добавив статический DisplayMetrices в метод onCreate () в Activity.

TabHomeActivity.java:

 public static DisplayMetrics displaymetrics; *inside onCreate()* displaymetrics = new DisplayMetrics(); 

Избегать выделения объектов во время операций рисования / компоновки (вместо этого использовать прелокацию и повторное использование)

Сообщение дает вам решение на тарелке, поэтому я не понимаю, каков ваш вопрос.

Вам нужно переместить создание новых объектов в метод onCreate, поэтому они создаются только один раз и используют их позже в методе onDraw.