2016-06-02 10 views
0

私は2つの画像ビューを持っています。Androidでスケーリングしているときに底面を固定しました

イメージのサイズを変更したい場合は、サイズが大きくなったらもう一方を小さくします。しかし、私はまた、上のイメージを上に、下のイメージを下にピボットさせたいと思っています。

私は最初(上)でこれを達成しましたが、下のものを下に回転させることができませんでした。

質問:どのように私は画像ピボットを作って行くとトップ 1は大きいほど小さくなることができます。あなたのレイアウトXMLファイルに

root = (RelativeLayout) findViewById(R.id.root); 
     iv = (ImageView) findViewById(R.id.imageView); 
     iv2 = (ImageView) findViewById(R.id.imageView2); 
     iv.setPivotY(iv.getX()); 


    detector = new GestureDetectorCompat(this, new GestureDetector.SimpleOnGestureListener() { 

     @Override 
     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
      iv.setScaleY(iv.getScaleY() - distanceY/root.getHeight()); 
      iv2.setScaleY(iv2.getScaleY()+ distanceY/root.getHeight()); 
      return true; 
     } 
    }); 
+0

今後、新しい問題を含めるように質問を編集したり、既存の回答を無効にしたりしないでください。代わりに、新しい質問を作成します。 – Matt

答えて

2

LinearLaoutを使用してみましたが、私はあなたが達成しようとしているものを全くわからないが、このコードはimageviewsの1のために使用され、それぞれが2つのセクションの中に画面を分割します。私は、あなたが何らかの目的を持っていると仮定して、画像を拡大し、ピボットポイントを設定するコードを持つコードを残しました。私はあなたがそれらをコメントアウトし、あなたがそれらなしで希望の結果を得るかどうかを調べることをお勧めします。

activity_main.xml:

<?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" 
       tools:context=".MainActivity" 
       android:id="@+id/root"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:layout_alignParentTop="true" 
     android:scaleType="fitCenter" 
     android:src="@mipmap/ic_launcher" /> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/imageView" 
     android:scaleType="fitCenter" 
     android:id="@+id/imageView2" 

     android:src="@mipmap/ic_launcher" /> 
</RelativeLayout> 

MainActivity.java:私はあなたのイメージファイルを持っていないとして、私は両方のImageViewsのデフォルトのランチャーの画像を使用して参照画像を置き換え

import android.support.v4.view.GestureDetectorCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 

import static com.example.justtesting.R.id.imageView; 

public class MainActivity extends AppCompatActivity{ 

    GestureDetectorCompat detector; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final int minH = 10; 
     final RelativeLayout root = (RelativeLayout) findViewById(R.id.root); 
     final ImageView iv = (ImageView) findViewById(imageView); 
     final ImageView iv2 = (ImageView) findViewById(R.id.imageView2); 

     detector = new GestureDetectorCompat(this, new GestureDetector.SimpleOnGestureListener() { 

      @Override 
      public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
       int height = iv.getHeight() + iv2.getHeight(); 
       android.view.ViewGroup.LayoutParams layoutParams = iv.getLayoutParams(); 
       if ((int) distanceY + layoutParams.height < minH) 
        layoutParams.height = minH; 
       else if ((int) distanceY + layoutParams.height > height - minH) 
        layoutParams.height = height-minH; 
       else 
        layoutParams.height = (int) distanceY + layoutParams.height; 
       android.view.ViewGroup.LayoutParams layoutParams2 = iv2.getLayoutParams(); 
       layoutParams2.height = height-layoutParams.height; 
       iv.setLayoutParams(layoutParams); 
       iv2.setLayoutParams(layoutParams2); 
       return true; 
      } 
     }); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return detector.onTouchEvent(event); 
    } 
} 

お知らせ私のプロジェクトでは

android:src="@mipmap/ic_launcher" 

適切と思われるとおりに変更してください。

次に、Nexus 5エミュレータ(X86-64)/ Android-22(Android-23と同じ結果)で動作するアプリのスクリーンショットを示します。

enter image description here

enter image description here

enter image description here

enter image description here

幸運!

+0

コードが正しく動作しません。スワイプまたはスワイプすると予期せず動きます。 – jason

+0

あなたはAndroidのどのバージョンをコンパイルしており、どのバージョンのAndroidをテストしていますか?また、完璧さのために、どこで/どのように検出器オブジェクトを使用していますか?提案されたコードをテストすると、2つのイメージのサイズが「期待どおり」に変化します。もう一方が大きくなるにつれてサイズが小さくなります。しかし、私は質問を正しく理解していないかもしれないし、私はあなたとは異なる環境でコンパイル/テストしているかもしれません。 – Kaamel

+0

SDKのバージョンは23です.Nexus 5エミュレータで試しています。 – jason

2

、レイアウト寸法の1/2にandroid:pivotYandroid:pivotXを設定します。

<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" 
    tools:context=".MainActivity" 
    android:id="@+id/root"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/imageView" 
      android:layout_alignParentTop="true" 
      android:scaleType="fitCenter" 
      android:src="@drawable/as" /> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/imageView" 
      android:scaleType="fitCenter" 
      android:id="@+id/imageView2" 
      android:src="@drawable/as" /> 
</RelativeLayout> 

はここに私のJavaコードです:

は、ここに私のレイアウトです。

+0

あなたはその質問に答えることができれば、100の賞金を得ることができます。 – jason

0

はあなたがlayout_weight

+0

動作しませんでしたが、ありがとう – jason

関連する問題