2014-08-28 2 views
1

это мой первый вопрос в stackoverflow. Любая помощь будет очень высоко ценится. Я пытаюсь увеличить холст с помощью строки поиска, поэтому в зависимости от хода поиска, холст будет увеличивать масштаб и уменьшать масштаб.Использование панели поиска для увеличения андроида Холст

вот мой код в основной деятельности:

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    // TODO Auto-generated method stub 
    Toast.makeText(MainActivity.this, "Seekbar Value : " + progress, Toast.LENGTH_SHORT).show(); 
    CPaintView paint = (CPaintView) this.findViewById(R.id.cPaintView1); 

    paint.zoomX = (float)progress; 
    paint.zoomY = (float)progress; 
    paint.invalidate(); 
} 

, то он будет передавать значение прогресса в класс CPaintView, содержащий холст:

public class CPaintView extends View implements OnTouchListener { 

    final Paint paint = new Paint(); 
    int color = Color.parseColor("#FF0000"); 

    Bitmap offScreenBitmap; 
    Canvas offScreenCanvas; 

    final int CIRCLE = 0; 
    final int TRIANGLE = 1; 
    final int SQUARE = 2; 
    int shape = CIRCLE; 
    private int mActivePointerId; 
    float zoomX = 0; 
    float zoomY = 0; 

    public CPaintView(Context context) { 
     super(context); 

     setup(); 
    } 

    public CPaintView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 

     setup(); 
    } 

    public CPaintView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     setup(); 
    } 

    public void setup() 
    { 
     setOnTouchListener(this); // define event listener and start intercepting events 
    } 


    @Override 
    protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     // draw the off screen bitmap 
     if(zoomX > 0) 
     { 
      canvas.save(); 
      canvas.scale(zoomX, zoomY); 
      canvas.drawBitmap(offScreenBitmap, 0, 0, paint); 
      canvas.restore(); 
     } 
     else 
      canvas.drawBitmap(offScreenBitmap, 0, 0, paint); 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     // get the x,y coordinates of the MotionEvent.ACTION_MOVE event 

     int pointerIndex = 0; 
     for(int i = 0; i < event.getPointerCount(); i++) 
     { 
      mActivePointerId = event.getPointerId(i); 
      pointerIndex = event.findPointerIndex(mActivePointerId); 
      float x = event.getX(pointerIndex); 
      float y = event.getY(pointerIndex); 

      float y1 = y + 20; 
      float x2 = x + 20; 
      float y2 = y1 - 10; 
      paint.setColor(color); 

      float verts[] = {x, y, x, y1, x2, y2}; 
      int[] vertsColors = {color, color, color, color, color, color}; 


      switch(shape) 
      { 
       case CIRCLE: 
        offScreenCanvas.drawCircle(x, y, 10, paint); break;// draw a red circle at the x,y coordinates specified by the user 
       case TRIANGLE: 
        offScreenCanvas.drawVertices(Canvas.VertexMode.TRIANGLES, verts.length, verts, 0, null, 0, vertsColors, 0, null, 0, 0, paint);break; 
       case SQUARE: 
        offScreenCanvas.drawRect(x-10, y-10, x+10, y+10, paint); break; 
      } 

      invalidate(); 
     } 
       return true; 
    } 


    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     // create/re-create the off screen bitmap to capture the state of our drawing 
     // this operation will reset the user's drawing 
      offScreenBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
      offScreenCanvas = new Canvas(offScreenBitmap); 
    } 
} 

У меня возникли проблемы с OnDraw метод. Проблема в том, что когда я увеличиваю прогресс в поисковой строке, весь холст исчезает, и я пытаюсь нарисовать его, кажется, что он не рисует. Но когда я уменьшаю прогресс поисковой системы до 0, весь чертеж возвращается, и я вижу его снова, включая чертеж, который кажется неработоспособным.

Прошу прощения за мой плохой английский.

спасибо.

ответ

0

Ваша проблема связана с тем, как работает шкала. Масштабирование по 0,0 не определено. Масштабирование по 1f, 1f является значением по умолчанию. Масштабирование не работает много на всех,

if(zoomX > 0) 
     { 
      canvas.save(); 
      canvas.scale(zoomX, zoomY); 
      canvas.drawBitmap(offScreenBitmap, 0, 0, paint); 
      canvas.restore(); 
     } 
     else 
      canvas.drawBitmap(offScreenBitmap, 0, 0, paint); 

если масштаб равен 0, то это будет правильно рисовать масштабируемый битовый массив. Потому что он пропустит шаг масштабирования. иначе у вас есть масштабирование как 50, которое, по существу, может иметь растровое изображение. Попробуйте увеличить масштаб до 1. Что-то вроде zoom = 12/(1 + прогресс). Тогда масштаб может варьироваться от 12x до значений, меньших нуля. Ваш рисунок кажется, что он должен быть там, это просто WAAAAY маленький. За исключением нуля, где вы пропустите этот шаг и сделайте это 1.

Смежные вопросы