Android: Как использовать метод onDraw в классе, расширяющем Activity?

В качестве новичка я создавал простое приложение-счетчик, используя простой макет xml и класс под названием «Counter», который выводит (расширяет) из класса Activity.

Теперь я хочу загрузить растровое изображение (файл png), чтобы разместить рядом с счетчиком. Я читал onDraw (), но для этого класса требуется расширение «Просмотр». Я пытаюсь создать объект этого класса, чтобы использовать его вместо этого, но безрезультатно. Я немного озадачен этой концепцией, как сделать это легко. Если бы кто-нибудь мог объяснить, я был бы признателен.

Простой пример с использованием функции onDraw – для этого требуется класс для расширения вида

Контекст для получения текущего контекста активности

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new myview(this)); } class myview extends View { public myview(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int x=80; int y=80; int radius=40; Paint paint=new Paint(); // Use Color.parseColor to define HTML colors paint.setColor(Color.parseColor("#CD5C5C")); canvas.drawCircle(x,x, radius, paint); } } } 

Я думаю, что вы не можете использовать onDraw в классе, расширяя действие из-за использования Canvas, вам нужно создать компонент Custom, расширяющий некоторый вид, и там выполняете действия, и что вам нужно сделать =>

1. Расширьте существующий класс или подкласс класса с собственным классом.

2. Верните некоторые из методов из суперкласса. Методы суперкласса для переопределения начинаются с «on», например, onDraw (), onMeasure (), onKeyDown (). Это похоже на «события» в Activity, которые вы переопределяете для жизненного цикла и других функциональных крючков.

3. Используйте новый класс расширения. После завершения вашего нового класса расширения можно использовать вместо представления, на котором оно было основано.

Не могли бы вы просто разместить ImageView рядом с вашим счетчиком? Вы можете сделать это в своем файле макета xml:

 <ImageView android:id="@id+/my_image" android:layout_width="50dip" android:layout_height="50dip" android:src="@drawable/name_of_my_image" /> 

Или в вашей активности:

 @Override protected void onCreate(Bundle bundle) { // ... ImageView image = (ImageView) findViewById(R.id.my_image); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image); image.setImageBitmap(bitmap); } 

Если вы хотите использовать настраиваемое представление и переопределить метод onDraw (), вот что вам нужно сделать:

 class MyCustomView extends View { public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { // your custom drawing canvas.drawRect(0, 0, 50, 50, new Paint()); } } 

По любым сомнениям вы можете обратиться к Android Training

Для этой цели вам не нужно использовать View.onDraw() . Просто используйте макеты и поместите любое рисованное изображение рядом с вашим счетчиком, скажем, textview, используя атрибут drawableLeft.

txtview_counter.drawableLeft="@drawable/xxx"