2016-11-06 8 views
0

私のImageViewはx軸の画面サイズと一致しており、の残りの領域はy軸にのレイアウトで使用しています。 ImageViewと同じサイズでこのImageViewにビットマップを作成したいのですが。どうしたらいいですか?私はいくつかの測定機能を呼び出す必要がありますいくつかの自動設定で行うことができますか?ビットマップを作成する前にImageViewを測定する方法は?

私はSetAdjustViewBounds()を試しましたが、それは私のためには機能しませんでした。

ビットマップを大きく作成すると(私はあまりメモリが無駄になりません)、SetScaleType(ImageView.ScaleType.Matrix)を設定すると、でもキャンバス上で描画操作を行っているときはわかりません実際の大きさの領域はにペイントする必要があります。キャンバスとビットマップの高さはyScreenに等しく、imgWeekViewの高さは灰色の色で全体をペイントしても0になります。

enter image description here

imgWeekView = new ImageView(context); 
//imgWeekView.SetAdjustViewBounds(true); 
imgWeekView.SetScaleType(ImageView.ScaleType.Matrix); 

layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.WrapContent,1f); 
layoutParams.Height = 0; 
imgWeekView.LayoutParameters = layoutParams; 

Bitmap bitmap = Bitmap.CreateBitmap((int)xScreen, (int)yScreen, Bitmap.Config.Argb8888); 
cnvWeekView = new Canvas(bitmap); 
imgWeekView.SetImageBitmap(bitmap); 
linearLayout.AddView(imgWeekView); //whole activity layout 

//Test 
cnvWeekView.DrawColor(new Color(128, 128, 128)); 
Paint paint = new Paint(PaintFlags.AntiAlias); 
paint.Color = new Color(255, 255,0); 
cnvWeekView.DrawCircle(50, 50, 40, paint); 

答えて

0

最後に、私は私のImageViewのを測定するために、ここで私は私の答えを投稿しますどのような方法を発見しました。

私は、はるかに簡単な解決策があるはずだと信じていましたが、そうでないかもしれません。私は、重要なデータのほとんどを取ったこの質問から:

How to get the width and height of an android.widget.ImageView?

物事は、しかし、私のアンドロイドアプリケーションに少し違って見えると私は理由を伝えるには十分経験していませんよ。私は物事を少し変えなければならなかった。私はインターフェイスについて少し勉強しなければならず、この質問も役に立ちました。ここで

Implementing the View.IOnTouchListener interface

私は物事を組み合わせた方法です。最初に私はこの尺度を行うクラスを作成しました。私はImageViewのを作成

public class MyPredrawListener : Java.Lang.Object, ViewTreeObserver.IOnPreDrawListener 
{ 
    ImageView imageView; 
    public MyPredrawListener(ImageView img) 
    { 
     imageView = img; 
    } 
    public bool OnPreDraw() 
    { 
     imageView.ViewTreeObserver.RemoveOnPreDrawListener(this); 
     int finalHeight = imageView.MeasuredHeight; 
     int finalWidth = imageView.MeasuredWidth; 
     Bitmap bitmap = Bitmap.CreateBitmap(finalWidth, finalHeight, Bitmap.Config.Argb8888); 
     imageView.SetImageBitmap(bitmap); 

     //Test to see result 
     Canvas cnv = new Canvas(bitmap); 
     Paint paint = new Paint(); 
     paint.Color = new Color(255, 255, 0); 
     cnv.DrawColor(new Color(128, 128, 128)); 
     cnv.DrawCircle(finalWidth-50, finalHeight-50, 50, paint); 

     return true; 
    } 
} 

、コードで

は、私はこのようなリスナーを設定します。 OnPreDraw関数で

imgWeekView = new ImageView(context); 
MyPredrawListener listener=new MyPredrawListener(imgWeekView); 
imgWeekView.ViewTreeObserver.AddOnPreDrawListener(listener); 

I色を灰色にビットマップをクリアし、図の右下に黄色の円を描き、グラフィカルに結果を確認するためのテストコードを置きます。

enter image description here

関連する問題