2013-05-07 68 views
0

我发现这个非常有用的代码,允许我缩放和移动位图,我一直在试图找到一种方法在我的应用程序中使用此代码。我不太了解这个类的使用方式(自学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(); 
     } 
    } 
} 
+0

所以你想改变你的'可绘制mIcon'与用户选择的图像? – 2013-05-08 12:47:57

+0

是的,这是正确的。我想从主类改变,但我现在通过使用用户选择的图像创建视图来实现它。虽然我现在试图找出是否可以使用Bitmap来做到这一点? – Purplemonkey 2013-05-08 12:51:48

+0

我认为这可以做到。只要将'Drawable'改为'Bitmap'并在'onDraw'中试试'canvas.drawBitmap(bitmap,null,null)' – 2013-05-08 13:00:02

回答

0

我不知道,但是这是你在找什么?

imageSpot.setImageResource(R.drawable.myImage); 
+0

我想他想知道如何使用用户选择的图像来显示。 – CoderOfHonor 2013-05-07 20:15:17

+0

上面的评论是正确的,我想能够更新/更改主类的图像,在上面的示例是touchExampleActivity – Purplemonkey 2013-05-07 20:38:35

+0

ive从未尝试过它,但也许如果您将ImageView设置为静态 – Evorlor 2013-05-07 20:54:55

相关问题