2015-05-26 4 views
0

В принципе, я хотел бы нарисовать линии на изображении, чтобы при увеличении этого изображения линии также были бы увеличены пропорционально или любые интерактивности, такие как сброс или сбрасывание зума. Я использую TouchImageView как мой ImageView и вот мой кодAndroid - Рисование линий с использованием растрового изображения на TouchImageView

public class ParkA extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.parka); 
     TouchImageView parka = (TouchImageView) findViewById(R.id.parka); 
     parka.setImageResource(R.drawable.parka); 

     Bitmap lineABmp = Bitmap.createBitmap(480, 640, Bitmap.Config.ARGB_8888); 
     Canvas lineACanvas = new Canvas(lineABmp); 
     Paint paint = new Paint(); 
     paint.setColor(Color.GREEN); 
     paint.setStrokeWidth(10); 
     lineACanvas.drawBitmap(lineABmp,0 ,0, null); 
     //lineACanvas.drawLine(60, 64, 60, 500, paint); 

     TouchImageView linea = new TouchImageView(this); 
     linea = (TouchImageView) findViewById(R.id.parka); 
     linea.setImageBitmap(lineABmp); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 


    } 

    @Override 
    protected void onPause() { 


     super.onPause(); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 


    } 

    @Override 
    public void onBackPressed() { 
     //Do Nothing 
    } 

} 

Вот мой XML-файл

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.kmparkit.ParkA" > 

    <com.km.parkit.TouchImageView 
     android:id="@+id/parka" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:contentDescription="@string/imageDesc" 
     android:scaleType="matrix" /> 
     <!-- android:src="@drawable/parka" --> 

</RelativeLayout> 

Если изменить Bitmap.createBitmap(480, 640, Bitmap.Config.ARGB_8888);

В Bitmap.createBitmap(parka.getWidth(), parka.getHeight(), Bitmap.Config.ARGB_8888);

LogCat и говорится, что ширина и высота должна быть> 0

Если я рисую Line, будет отображаться только сама зеленая линия

Что мне здесь не хватает, чтобы создать изображение TouhImageView с рисунками на нем?

ОБНОВЛЕНИЕ:

Вот решение!

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.parka); 

     TouchImageView parka = (TouchImageView) findViewById(R.id.parka); 
     parka.setImageResource(R.drawable.parka); 

     Bitmap lineABmp = ((BitmapDrawable)parka.getDrawable()).getBitmap(); 
     Bitmap lineAMutBmp = lineABmp.copy(Bitmap.Config.ARGB_8888, true); 

     Canvas lineACanvas = new Canvas(lineAMutBmp); 
     Paint paint = new Paint(); 
     paint.setColor(Color.GREEN); 
     paint.setStrokeWidth(10); 
     lineACanvas.drawLine(82, 1058, 82, 858, paint); 

     parka.setImageBitmap(lineAMutBmp); 
    } 

Я должен скопировать растровое изображение, чтобы сделать его изменчивым и использовать parka.setImageResource(); и parka.setImageBitmap() для отображения изображения и линии в одном TouchImageView во время рисования линий с помощью Canvas.

ответ

1

Попробуйте что-то вроде этого:

EDIT: это должно сделать трюк;)

setContentView(R.layout.parka); 
    TouchImageView parka = (TouchImageView) findViewById(R.id.parka); 
    parka.setImageResource(R.drawable.parka); 
    Bitmap lineABmp = ((BitmapDrawable)parka.getDrawable()).getBitmap(); 

    Bitmap copy = Bitmap.createBitmap(lineABmp); 

    Canvas lineACanvas = new Canvas(copy); 
    Paint paint = new Paint(); 
    paint.setColor(Color.GREEN); 
    paint.setStrokeWidth(10); 
    lineACanvas.drawLine(60, 64, 60, 500, paint); 

    parka.setImageBitmap(copy); 

Днем кодирования: D

+0

LogCat говорит, что Неизменное растровый передается Canvas конструктор .. –

+0

Я изменил свой ответ – Gordak

+0

Это было все равно, пока я не внес изменения в битмап-часть в этот битмап lineABmp = ((BitmapDrawable) parka.getDrawable()). GetBitmap(); \t Bitmap lineAMutBmp = lineABmp.copy (Bitmap.Config.ARGB_8888, true); 'Теперь это работает! Но только для показа изображения из 'setImageResource', но ничего на холсте :( –

Смежные вопросы