2016-09-01 12 views
0

私は今いくつかのプロジェクトに取り組んでいます。実際に私がしたいことは、ユーザーにサークルを与え、彼がクリックするとギャラリーやカメラで写真を選択できるようになります。グライド - トランスフォーメーションライブラリを使って実際にサークルのカスタムシェイプを描画し、イメージを配置しますが、このサークル内をスクロールしてユーザーのイメージの特定の部分を表示することはできません。 解決策が役立ちます。 私のXMLファイルには、次のようになります。アンドロイド:スクロール可能な写真を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、良い答えを、私は円の内側にスクロールしたい、これが私の画像をスクロール可能にするために私を助けしかしそれは実際に私が想像して何をしないのですか? あなたは何か提案がありますか? ありがとう@LychmanIT –

+0

ええ、私はあなたのサークルのマスクを作るべきだと思っています。 http://stackoverflow.com/questions/14801075/android-how-to-apply-mask-on-imageview – LychmanIT

+0

私の編集をチェックしてください。これは助けてください – LychmanIT

関連する問題