Java android如何更新视图以包含自定义图形?

Java android如何更新视图以包含自定义图形?,java,android,Java,Android,我发现这段代码非常有用,可以缩放和移动位图,我一直在尝试在我的应用程序中使用这段代码。我真的不理解这个类的使用方式(自学的java编码器,所以我可能缺少一些基础知识)。我基本上希望能够打开画廊,并选择一个文件,可以使用此代码。我可以用标准的ImageView完成所有这些,但用ImageView我无法缩放/移动 它只是使用touchexampleview类将图像放置在屏幕上,而touchexampleview类包含加载默认图像的行 mIcon = context.getResources().ge

我发现这段代码非常有用,可以缩放和移动位图,我一直在尝试在我的应用程序中使用这段代码。我真的不理解这个类的使用方式(自学的java编码器,所以我可能缺少一些基础知识)。我基本上希望能够打开画廊,并选择一个文件,可以使用此代码。我可以用标准的ImageView完成所有这些,但用ImageView我无法缩放/移动

它只是使用touchexampleview类将图像放置在屏幕上,而touchexampleview类包含加载默认图像的行

mIcon = context.getResources().getDrawable(R.drawable.ic_launcher);
我可以在类中解决如何改变这一点,但我希望能够动态地做到这一点,并且由用户驱动

这是主课

public class TouchExampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TouchExampleView view = new TouchExampleView(this);

        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));

        setContentView(view);

    }
}
还有touchexampleview类

public class TouchExampleView extends View {
    private Drawable mIcon;
    private float mPosX;
    private float mPosY;

    private VersionedGestureDetector mDetector;
    private float mScaleFactor = 1.f;

    public TouchExampleView(Context context) {
        this(context, null, 0);
    }

    public TouchExampleView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TouchExampleView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        mIcon = context.getResources().getDrawable(R.drawable.ic_launcher);
        mIcon.setBounds(0, 0, mIcon.getIntrinsicWidth(), mIcon.getIntrinsicHeight());

        mDetector = VersionedGestureDetector.newInstance(context, new GestureCallback());
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        mDetector.onTouchEvent(ev);
        return true;
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.save();
        canvas.translate(mPosX, mPosY);
        canvas.scale(mScaleFactor, mScaleFactor);
        mIcon.draw(canvas);
        canvas.restore();
    }

    private class GestureCallback implements VersionedGestureDetector.OnGestureListener {
        public void onDrag(float dx, float dy) {
            mPosX += dx;
            mPosY += dy;
            invalidate();
        }

        public void onScale(float scaleFactor) {
            mScaleFactor *= scaleFactor;

            // Don't let the object get too small or too large.
            mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));

            invalidate();
        }
    }
}

我不确定,但这就是你要找的吗

imageSpot.setImageResource(R.drawable.myImage);

我想他想知道如何使用用户选择的图像来显示。上面的评论是正确的,我想能够更新/更改主类中的图像,在上面的示例中是TouchExampleActivity我从未尝试过,但是,如果您将ImageView设置为Static,以便使用用户选择的图像更改您的
可绘制mIcon
,则可能是正确的。我想从主类更改,但现在通过使用用户选择的图像创建视图,使其正常工作。虽然我现在想知道我是否可以用位图来做这件事,但我认为这是可以做到的。只需将
Drawable
更改为
Bitmap
,然后在
onDraw
中尝试
canvas.drawBitmap(Bitmap,null,null)