2016-09-01 3 views
0

Я сейчас работаю над каким-то проектом, и на самом деле то, что я хочу сделать, я дам пользователю круг, и когда он нажмет на него, он сможет выбрать фотографию из галереи или с помощью своей камеры, на самом деле нарисуйте мою собственную форму круга, а затем поместите изображение в нее с помощью библиотеки Glide-Transformation Library, но проблема в том, что я не могу прокручивать внутри этого круга, чтобы показать определенную часть изображения пользователя. Любое решение будет полезно. Мой файл XML выглядит следующим образом:android: Как разместить прокручиваемую фотографию в imageView?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#D2DDD7" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.karim.helloworld.MainActivity"> 
<ImageView 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:id="@+id/imgView" 
    android:padding="5dp" 
    android:scaleType="centerCrop" 
    android:background="@drawable/circle_image"/> 
</RelativeLayout> 

и мой класс активность:

package com.example.karim.helloworld; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ImageView; 

import com.bumptech.glide.Glide; 

import jp.wasabeef.glide.transformations.BlurTransformation; 
import jp.wasabeef.glide.transformations.CropCircleTransformation; 

public class MainActivity extends AppCompatActivity { 
    ImageView imageView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     imageView = (ImageView) findViewById(R.id.imgView); 
     Glide.with(this).load(R.drawable.pk).bitmapTransform(new CropCircleTransformation(getApplicationContext())) 
       .into(imageView); 
    } 
}] 

custom shape & image view Image I want to scroll into it

ответ

1

Существует пример свитка imageView, надеюсь, что это помогает:

// set maximum scroll amount (based on center of image) 
    int maxX = (int)((bitmapWidth/2) - (screenWidth/2)); 
    int maxY = (int)((bitmapHeight/2) - (screenHeight/2)); 
// set scroll limits 
final int maxLeft = (maxX * -1); 
final int maxRight = maxX; 
final int maxTop = (maxY * -1); 
final int maxBottom = maxY; 

// set touchlistener 
ImageView_BitmapView.setOnTouchListener(new View.OnTouchListener() 
{ 
    float downX, downY; 
    int totalX, totalY; 
    int scrollByX, scrollByY; 
    public boolean onTouch(View view, MotionEvent event) 
    { 
     float currentX, currentY; 
     switch (event.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
       downX = event.getX(); 
       downY = event.getY(); 
       break; 

      case MotionEvent.ACTION_MOVE: 
       currentX = event.getX(); 
       currentY = event.getY(); 
       scrollByX = (int)(downX - currentX); 
       scrollByY = (int)(downY - currentY); 

       // scrolling to left side of image (pic moving to the right) 
       if (currentX > downX) 
       { 
        if (totalX == maxLeft) 
        { 
         scrollByX = 0; 
        } 
        if (totalX > maxLeft) 
        { 
         totalX = totalX + scrollByX; 
        } 
        if (totalX < maxLeft) 
        { 
         scrollByX = maxLeft - (totalX - scrollByX); 
         totalX = maxLeft; 
        } 
       } 

       // scrolling to right side of image (pic moving to the left) 
       if (currentX < downX) 
       { 
        if (totalX == maxRight) 
        { 
         scrollByX = 0; 
        } 
        if (totalX < maxRight) 
        { 
         totalX = totalX + scrollByX; 
        } 
        if (totalX > maxRight) 
        { 
         scrollByX = maxRight - (totalX - scrollByX); 
         totalX = maxRight; 
        } 
       } 

       // scrolling to top of image (pic moving to the bottom) 
       if (currentY > downY) 
       { 
        if (totalY == maxTop) 
        { 
         scrollByY = 0; 
        } 
        if (totalY > maxTop) 
        { 
         totalY = totalY + scrollByY; 
        } 
        if (totalY < maxTop) 
        { 
         scrollByY = maxTop - (totalY - scrollByY); 
         totalY = maxTop; 
        } 
       } 

       // scrolling to bottom of image (pic moving to the top) 
       if (currentY < downY) 
       { 
        if (totalY == maxBottom) 
        { 
         scrollByY = 0; 
        } 
        if (totalY < maxBottom) 
        { 
         totalY = totalY + scrollByY; 
        } 
        if (totalY > maxBottom) 
        { 
         scrollByY = maxBottom - (totalY - scrollByY); 
         totalY = maxBottom; 
        } 
       } 

       ImageView_BitmapView.scrollBy(scrollByX, scrollByY); 
       downX = currentX; 
       downY = currentY; 
       break; 

     } 

     return true; 
    } 
}); 

EDIT: Сделайте маску с помощью последующей XML:

<FrameLayout> 
    <ImageView /> put a image which has a transparent circle in it 
    <ImageView /> your image 
</FrameLayout> 
+0

Hmmmmm, Хороший ответ, Это помогает мне сделать мой образ прокручивать, но это на самом деле не делать то, что я представляю себе, я хочу, чтобы прокручивать внутри круга? Есть ли у вас какие-либо предложения? Thank @LychmanIT –

+0

Да, я думаю, что вы должны сделать маску своего круга. http://stackoverflow.com/questions/14801075/android-how-to-apply-mask-on-imageview – LychmanIT

+0

Проверьте мое редактирование. Это должно помочь – LychmanIT