位图显示在屏幕外

时间:2014-02-27 06:49:09

标签: android

当我将图像(代码中的Bitmap2)动态设置到视图时,它会显示如下所示的屏幕外。我怎么解决这个问题。实际上在MainActivity XML中,我放置了一个view.i需要一个带有适合屏幕的整体图像。请帮我。 这是我的代码:

main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/ic_launcher">

    <com.example.newscratch.PaintView
        android:layout_gravity="center"
        android:id="@+id/img1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

MainActivity.java

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//        View bgView = findViewById(R.id.background);
    }
}

PaintView.java

    public class PaintView extends View implements OnTouchListener {
    private static final String TAG = "PaintView";
    Bitmap Bitmap1, Bitmap2;
    Bitmap Transparent;
    Bitmap overlay;
    int X = -100;
    int Y = -100;
    Canvas c2;
    private boolean isTouched = false;

    // List<Point> points = new ArrayList<Point>();
    Paint paint = new Paint();

    public PaintView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initView(context);
    }

    public PaintView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

     private void initView(Context context) {
         setFocusable(true);
            setFocusableInTouchMode(true);
            this.setOnTouchListener(this);
            DisplayMetrics metrics = context.getResources().getDisplayMetrics();
            int width = metrics.widthPixels;
            int height = metrics.heightPixels;

            Transparent = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            Bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
            Bitmap2 = BitmapFactory
                    .decodeResource(getResources(), R.drawable.main);
             c2 = new Canvas();

            c2.setBitmap(Transparent);
              //        c2.drawBitmap(Bitmap1, 0, 0, null);
            c2.drawBitmap(Bitmap2, 0, 0, paint);
            paint.setAlpha(0);
            paint.setStyle(Style.FILL);
            paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
            paint.setAntiAlias(true);   
    }

    private static Point getDisplaySize(final Display display) {
      final Point point = new Point();
       point.x = display.getWidth();
       point.y = display.getHeight();
      return point;
     }

    @Override
    public void onDraw(Canvas canvas) {
        System.out.println("onDraw");
        c2.drawCircle(X, Y, 50, paint);
        if(isTouched)
        {
            canvas.drawBitmap(Bitmap1, 0, 0, null);
        }
        canvas.drawBitmap(Transparent, 0, 0, null);

    }

    public boolean onTouch(View view, MotionEvent event) {
        isTouched = true;
        X = (int) event.getX();
        Y = (int) event.getY();

        invalidate();
        return true;
    }
     }

      class Point {
    float x, y;

    @Override
    public String toString() {
        return x + ", " + y;
    }
     }

0 个答案:

没有答案
相关问题