我发现这个非常有用的代码,允许我缩放和移动位图,我一直在试图找到一种方法在我的应用程序中使用此代码。我不太了解这个类的使用方式(自学java编码器,所以我可能会错过这里的一些基础知识)。我基本上希望能够打开图库并选择一个可以被这个代码使用的文件。我可以用标准ImageView完成所有这些工作,但使用ImageView无法缩放/移动。android如何更新视图以包含自定义图形?
主类,它只是使用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();
}
}
}
所以你想改变你的'可绘制mIcon'与用户选择的图像? – 2013-05-08 12:47:57
是的,这是正确的。我想从主类改变,但我现在通过使用用户选择的图像创建视图来实现它。虽然我现在试图找出是否可以使用Bitmap来做到这一点? – Purplemonkey 2013-05-08 12:51:48
我认为这可以做到。只要将'Drawable'改为'Bitmap'并在'onDraw'中试试'canvas.drawBitmap(bitmap,null,null)' – 2013-05-08 13:00:02