代码之家  ›  专栏  ›  技术社区  ›  Prabhu R

创建自定义ImageView

  •  10
  • Prabhu R  · 技术社区  · 15 年前

    我通过扩展ImageView来创建一个自定义的图像视图,它只在屏幕上绘制一些文本,但是我在模拟器屏幕上看不到任何绘制内容,但是日志消息和println会在日志控制台中打印出来。我不是在做什么吗?

    这是我的活动

    public class HelloAndroidActivity extends Activity
    {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
    
            //        setContentView(R.layout.main);
            CustomImageView myView = new CustomImageView(getApplicationContext());
            System.out.println("Setting the view");
            myView.invalidate();
            setContentView(myView);
            System.out.println("Calling invalidate");
        }
    }
    

    这是我的自定义图像视图

    public class CustomImageView extends ImageView
    {
    
        /**
         * @param context
         */
        public CustomImageView(Context context)
        {
            super(context);
            // TODO Auto-generated constructor stub
            setBackgroundColor(0xFFFFFF);
        }
    
        /**
         * @param context
         * @param attrs
         */
        public CustomImageView(Context context, AttributeSet attrs)
        {
            super(context, attrs);
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @param context
         * @param attrs
         * @param defStyle
         */
        public CustomImageView(Context context, AttributeSet attrs, int defStyle)
        {
            super(context, attrs, defStyle);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        protected void onDraw(Canvas canvas)
        {
            // TODO Auto-generated method stub
                    super.onDraw(canvas);
            System.out.println("Painting content");
            Paint paint  = new Paint(Paint.LINEAR_TEXT_FLAG);
            paint.setColor(0x0);
            paint.setTextSize(12.0F);
            System.out.println("Drawing text");
            canvas.drawText("Hello World in custom view", 100, 100, paint);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event)
        {
            // TODO Auto-generated method stub
            Log.d("Hello Android", "Got a touch event: " + event.getAction());
            return super.onTouchEvent(event);
    
        }
    }
    

    甚至在ontouchevent()中的日志消息也会被打印出来,但不会被绘制。

    这是我的main.xml,它具有

    <?xml version="1.0" encoding="utf-8"?>
    
    <AbsoluteLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/AbsoluteLayout">
    </AbsoluteLayout>
    
    2 回复  |  直到 12 年前
        1
  •  3
  •   bhatt4982    15 年前

    使用颜色值 白色 黑色颜料 而不是十六进制值。

        2
  •  1
  •   JavaCoderEx    12 年前

    你检查过帆布的尺寸吗?图像视图希望位图/Drawable返回其大小,并根据scaleType标志确定视图的大小。我在代码中看不到任何决定视图大小以满足布局需求的内容。

    -里克