2016-09-19 110 views
-1

我想使用onDraw處理函數在Imageview上繪圖。 我發現下面的例子,其中一個對角線橫跨ImageView的(與Eclipse創建)得出:Android Studio ImageView onDraw

package de.carpelibrum.grafik; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class ZeichnenView extends ImageView { 
    public ZeichnenView(Context context, AttributeSet attrs) { 
     super(context, attrs);  
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint pinsel = new Paint(); 
     pinsel.setColor(Color.rgb(64, 64, 255)); 
     pinsel.setStrokeWidth(5); 
     canvas.drawLine(0, 0, getWidth(), getHeight(), pinsel); 
    } 
} 

我導入相應的項目到Android Studio中,它的工作。

現在,當我想在Android Studio中創建一個類似的示例項目時,我將從手動將ImageView放置在屏幕上來設計佈局。 我的問題:我如何實現一個onDraw處理程序,該處理程序使用此ImageView?

Regards, Kyriakos。

回答

0

您可以以編程方式或在佈局中製作ImageView。這個答案已經從Android - Canvas drawLine inside ImageView

開發

編程會是這個樣子:

ImageView imageView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     LinearLayout layout = (LinearLayout) findViewById(R.id.root_layout); 
     imageView = new ImageView(this); 
     imageView.setId("lineImage"); 
     LinearLayout.LayoutParam params = (new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     imageView.setLayoutParams(params); 
     layout.addView(imageView); 
     DrawOnImage(positionx, positiony, width, height, Color.BLACK); 

} 

private void DrawOnImage(float x, float y, float xend, float yend, int color) { 

    bmp = Bitmap.createBitmap(imageView.getWidth(), imageView.getHeight(), Config.ARGB_8888); 
    canvas = new Canvas(bmp); 
     imageView.draw(canvas); 

    Paint p = new Paint(); 
    p.setColor(color); 
    canvas.drawLine(x, y, xend, yend, p); 
    imageView.setImageBitmap(bmp); 
} 

佈局爲基礎的方法會是這個樣子:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/lineImage" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:src="@drawable/image_src"/> 

</LinearLayout> 

,並在您Activity你會做什麼類似的頂部,但不是創建您的View你只能在你的resources -> layout目錄中找到它。

 @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      ImageView imageView = (ImageView) findViewById(R.id.lineImage); 
      DrawOnImage(positionx, positiony, width, height, Color.BLACK); 
    } 

注意:此代碼尚未經過測試。