2016-09-19 15 views
-1

onDrawハンドラを使用してImageviewを描画したいと思います。 私は対角線がImageViewの(Eclipseのを使用して作成)を横切って引かれ、次の例が見つかりました:Androidスタジオ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を画面に配置してレイアウトを設計することから始めます。 私の質問:このImageViewを描画するonDrawハンドラを実装するにはどうすればよいですか?

よろしく、 Kyriakos。

答えて

0

ImageViewをプログラムでレイアウトすることも、レイアウト内で作成することもできます。

<?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あなたが何かをするだろう内:レイアウトベースのアプローチは、次のようになります

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); 
} 

:この答えは、プログラムは次のようになりますAndroid - Canvas drawLine inside ImageView

から開発されてきました上部に似ていますが、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); 
    } 

注:このコードはテストされていません。