2017-08-04 5 views
0

私は、テキストビューをズームするためにピンチを実装しました。スクロールなしで正常に動作します。しかし、私は長いコンテンツを持っているので、ズームとスクロールの両方が必要です。私がスクロールを置くと、ズームとスクロールはうまくいきますが、スムーズではなく、水平方向にしか指を動かさなくてはなりません。指を上下に動かすとスクロールします。スクロールをスムーズに行い、縦方向と横方向の両方にズームする方法

ZoomView.java

public class ZoomView extends TextView { 
private static final String TAG = "ZoomTextView"; 
private ScaleGestureDetector mScaleDetector; 

private float mScaleFactor = 1.f; 
private float defaultSize; 

private float zoomLimit = 3.0f; 


public ZoomView(Context context) { 
    super(context); 
    initialize(); 
} 

public ZoomView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initialize(); 
} 

public ZoomView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    initialize(); 
} 

private void initialize() { 
    defaultSize = getTextSize(); 
    mScaleDetector = new ScaleGestureDetector(getContext(), new ScaleListener()); 

} 

public void setZoomLimit(float zoomLimit) { 
    this.zoomLimit = zoomLimit; 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

@Override 
public boolean onTouchEvent(@NonNull MotionEvent ev) { 
    super.onTouchEvent(ev); 
    mScaleDetector.onTouchEvent(ev); 
    return true; 
} 

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { 
    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     mScaleFactor *= detector.getScaleFactor(); 
     mScaleFactor = Math.max(1.0f, Math.min(mScaleFactor, zoomLimit)); 
     setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultSize * mScaleFactor); 
     Log.e(TAG, String.valueOf(mScaleFactor)); 
     return true; 
    } 
} 
} 

Vithale.java

public class vithale extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_vithale); 
} 
} 

activity_vithale.xml

<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="wrap_content"> 
<ScrollView 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/sc"> 
<com.example.acer.myapplication.ZoomView 
    android:id="@+id/iop" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:text="@string/twentyfive"/> 
</ScrollView> 
</RelativeLayout> 
+0

Senseyライブラリを使用して目標を達成することができます.- https://github.com/nisrulz/sensey –

+0

@MohitCharadva私のプロジェクトでこれを実装する方法を教えてください。 – Devk

答えて

0

だけで固定ズームとスクロールの問題をvithale.javaするために、この行を追加することではなく、スクロールがスムーズでないことが唯一のものです

ZoomView iop =(ZoomView)findViewById(R.id.iop); iop.setMovementMethod(new ScrollingMovementMethod());

関連する問題