开发者

how to set contentview declaratively or use customview class

i'd like to load a picture from sdcard into my view then draw upon it. so far i can take the picture and display it in an imageview after i've drawn a circle on the bitmap but this is not how it should be done. I think that i need to create a custom view class and override it's onDraw(). Atm i have a relative layout with a surfaceview, after the surfaceview i have the ima开发者_如何学运维geview and buttons. My question is if i write a custom view class to handle the drawing, i would then pass that to my activity's setContent view, what is confusing me is if the layout is declared declaratively via the xml file, how can i set the activity's setContentView() to the custom view class that handles the drawing?

thanks mat

[edit]

here's the xml layout i'm using. this is not how i should do it using an imageview.

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical" android:layout_width="match_parent" 
                android:layout_height="wrap_content" android:gravity="fill">



    <ImageView android:id="@+id/imageView1" 
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"></ImageView>

               <com.tecmark.HorizontalSlider android:id="@+id/slider"
                android:indeterminateOnly="false"
                android:progressDrawable="@android:drawable/progress_horizontal"
                android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"
                android:minHeight="20dip"
                android:maxHeight="20dip" android:layout_width="fill_parent" 
                android:layout_height="wrap_content"/>



 </RelativeLayout>               




public class LoadPic extends Activity{

    private static final String TAG = "Loadpic";
    private ImageView imageview;
    private File tempFile;
    private byte[] imageArray;
    private HorizontalSlider slider;
    private Canvas canvas;

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        Log.e(TAG, " loadpic onCreate");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.load2);
        setProgressBarVisibility(true);
        slider = (HorizontalSlider) this.findViewById(R.id.slider);
        slider.setOnProgressChangeListener(changeListener);


        imageview = (ImageView)findViewById(R.id.imageView1);

        tempFile = new File(Environment.getExternalStorageDirectory().
             getAbsolutePath() + "/"+"image.jpg");

        imageArray = new byte[(int)tempFile.length()];

  try{

        InputStream is = new FileInputStream(tempFile);
        BufferedInputStream bis = new BufferedInputStream(is);
        DataInputStream dis = new DataInputStream(bis);


        int i = 0;

        while (dis.available() > 0) {
        imageArray[i] = dis.readByte();
        i++;
        }

        dis.close();

  } catch (Exception e) {

           e.printStackTrace();
        }

        BitmapFactory.Options bfo = new BitmapFactory.Options();
        bfo.inSampleSize = 5;
        Bitmap bm = BitmapFactory.decodeByteArray(imageArray, 0, imageArray.length, bfo);
        Log.e(TAG, bm.toString());
        //imageview.setImageBitmap(bm);


        Bitmap bmOverlay = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());
        canvas = new Canvas(bmOverlay);
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(1);
        paint.setStyle(Paint.Style.STROKE);



        canvas.drawBitmap(bm, new Matrix(), null);
        canvas.drawCircle(50, 50, 25, paint);
        imageview.setImageBitmap(bmOverlay);






    }// end of onCreate


    private OnProgressChangeListener changeListener = new OnProgressChangeListener() {




                    @Override
                    public void onProgressChanged(View v, int progress) {
                        // TODO Auto-generated method stub
                        setProgress(progress);

                    }



            };


}//end of Activity

What i'm thinking of doing is creating a customview class that handles the drawing on the bitmap. But if i do this then how do i make setContentView() to point to my customView class when it point to the xml file. Sorry if i missing something here.


If you want to have a custom view for the bitmap and drawing then you can simply extend ImageView and override the paint method. Something like that:

public class MyImage extends ImageView {
    ...
    @Override
    public void paint(...){}
}

And in the xml layout change the ImageView to

<what.ever.package.MyImage ... />
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜