Рисование растрового изображения в Android? - PullRequest
0 голосов
/ 22 марта 2011

Мой проект посвящен обработке изображений в Android. У меня есть растровое изображение, загруженное из файла ресурсов (изображение в формате PNG).Я хочу нарисовать это.Но я не мог.Вот мой фрагмент кода:

mB = BitmapFactory.decodeResource(getResources(), R.drawable.picture);
Canvas c = new Canvas(mB);
Paint p = new Paint(); 
c.drawBitmap(mB,0,0,p); 

это не сработало.Код верен?. Есть ли что-то еще, что я должен сделать?

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Вместо этого вы должны использовать ImageView и загрузить его как

imageView.setImageResource(R.drawable.picture);

Если вы хотите вручную нарисовать его с помощью Canvas, вам нужно использовать холст, который передается в draw () метод и реализация пользовательского представления.

Обновление для добавления примера CustomView:

public class CustomView extends View {
    private Paint mPaint;
    private Drawable mDrawable;

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        mDrawable = context.getResources().getDrawable(R.drawable.some_drawable);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mDrawable.draw(canvas);
    }
}
0 голосов
/ 22 марта 2011

Есть пара вещей, которые вам не хватает.

Во-первых, я думаю, вы неправильно понимаете конструктор Canvas (Bitmap b). Переданное растровое изображение - это то, что Canvas будет рисовать в . Это может быть просто новый растровый рисунок, который вы создали.

Во-вторых, рекомендуется использовать Canvas, который передается вам в методе onDraw вашего View. Предположительно, этот View - один из вашей Activity, либо извлеченный из макета XML через findViewById, либо созданный и переданный setContentView в методе onCreate () Activity.

Итак, вам нужно создать подкласс View и переопределить метод onDraw, чтобы закончить рисование. Что-то вроде:

public class MyView extends View {
  @Override
  public void onDraw (Canvas c) {
     Bitmap mB = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.picture);
     c.drawBitmap(mB, 0, 0, null);
  }
}

Затем в своей деятельности вам нужно будет создать экземпляр вашего нового представления и передать его в действие через setContentView:

public class MyActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mv = new MyView(this);
    setContentView(mv);
}

Вместо этого можно вызвать перегрузку setContentView (View v, ViewGroup.LayoutParameters lp), если вы хотите настроить параметры LayoutParameters.

Я не проверял ничего из этого, но это должно, по крайней мере, привести вас на правильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...