2010-12-11 13 views
10

के आसपास अन्य विचारों को स्थानांतरित करता है मैं अब लगभग दो सप्ताह के लिए एंड्रॉइड सीख रहा हूं (AS2/3 में विशेषज्ञ)।एंड्रॉइड - उंगली के साथ एक छवि दृश्य को घुमाएं

मैं एक साधारण LinearLayout1, which contains an ImageView` बनाया है, एक विनाइल रिकॉर्ड (सिर्फ एक परिपत्र डिस्क मूल रूप से)

मैं इस ImageView की स्थापना की है घुमाया जा करने के लिए की एक png युक्त जब उपयोगकर्ता उस पर एक उंगली खींच लेता है, जैसे एक रिकॉर्ड खरोंच।

मेरा कोड काम कर रहा है (यकीन नहीं है कि यह सबसे अच्छा तरीका है लेकिन यह काम करता है)। समस्या यह है कि ImageView घुमाया गया है, यह चारों ओर अन्य विचारों को धक्का देता है। मैंने यह निर्धारित किया है क्योंकि मेरी गोल छवि पारदर्शी कोनों के साथ वास्तव में एक वर्ग है। यह उन कोनों में है जो आसपास के अन्य विचारों को दबा रहे हैं, और यदि स्क्रीन ImageView उचित है, तो स्क्रीन के बाईं ओर रिकॉर्ड को धक्का दे रहा है।

इस ऑनलाइन को हल करने के कुछ प्रयास हैं, लेकिन उनमें से कोई भी मुझे जो कुछ चाहिए उसे प्रतीत नहीं होता है और कुछ उदाहरणों में इतने मजबूत हैं कि मैं अपने शुरुआती स्तर पर इसे से क्या लेना चाहता हूं।

अगर कोई ऐसा कर सकता है जो मैं कर सकता हूं तो कुछ हल कर सकता हूं ताकि यह हल हो सके। मुझे एहसास है कि एक साधारण उत्तर मौजूद नहीं हो सकता है, लेकिन ध्यान रखें कि मैं जावा नोब हूं और इसे जितना आसान कर सकता हूं! किसी भी मदद के लिए अग्रिम में बहुत - बहुत धन्यवाद!

भी अगर कोई मुझे बता सकता है कि मुझे रोटेशन से 50 को घटाने की आवश्यकता क्यों है ताकि रिकॉर्ड को उस सटीक स्थान के नीचे ले जाया जा सके जो उपयोगकर्ता छूता है, जो भी सहायक होगा! विधि अद्यतनRotation() में इसे देखें।

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/baseView" 
    android:background="#FFFFFFFF" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ImageView 
     android:id="@+id/turntable" 
     android:src="@drawable/turntable" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 

</LinearLayout> 

और यहाँ मेरी जावा कोड है:

package com.codingfiend.android.turntable; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Matrix; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.Window; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class Turntable extends Activity 
{ 
    View baseView; 
    ImageView turntable; 
    TextView bottomText; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 

     baseView = (View)findViewById(R.id.baseView); 
     turntable = (ImageView)findViewById(R.id.turntable); 

     turntable.setOnTouchListener(onTableTouched); 
    } 

    public android.view.View.OnTouchListener onTableTouched = new android.view.View.OnTouchListener() 
    { 
     public boolean onTouch(View v, MotionEvent evt) 
     { 
      double r = Math.atan2(evt.getX() - turntable.getWidth()/2, turntable.getHeight()/2 - evt.getY()); 
      int rotation = (int) Math.toDegrees(r); 


      if (evt.getAction() == MotionEvent.ACTION_DOWN) 
      { 
       // 
      } 

      if (evt.getAction() == MotionEvent.ACTION_MOVE) 
      { 
       updateRotation(rotation); 
      } 

      if (evt.getAction() == MotionEvent.ACTION_UP) 
      { 
       // 
      } 

      return true; 
     } 
    }; 

    private void updateRotation(double rot) 
    { 
     float newRot = new Float(rot); 

     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.turntable); 

     Matrix matrix = new Matrix(); 
     matrix.postRotate(newRot - 50); 

     Bitmap redrawnBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 
     turntable.setImageBitmap(redrawnBitmap); 
    } 
} 

संपादित

यह बाहर घूम रहा है एक चिड़चिड़ी समस्या हो

यहाँ मेरी एक्सएमएल मार्कअप है। बिना किसी छवि के स्क्रीन के बड़े या बड़े आकार की छवि को घुमाने के लिए एक तरीका बनना होगा ताकि पूरी छवि स्क्रीन पर रहती है। घुमावदार छवि का हिस्सा स्क्रीन से क्यों नहीं जा सकता? अधिक निराश। मैंने छवि दृश्य को फ्रेमव्यू में आंशिक रूप से सहायता करने की कोशिश की। अब मैं उन अन्य विचारों को जोड़ सकता हूं जो प्रभावित नहीं होंगे, लेकिन मेरे पास अभी भी मेरी डिस्क काफी बड़ी नहीं हो सकती है क्योंकि इसे घुमाने पर स्क्रीन सीमाओं को पारित करने की अनुमति नहीं है। मुझे क्यों नहीं मिलता है। मैंने छवि दृश्य को विस्तारित करने की जांच नहीं की है। किसी भी अन्य विचार की सराहना की जाएगी!

+1

+1 अच्छी तरह से प्रश्न पूछा गया। एसओ में आपका स्वागत है – wheaties

उत्तर

3

वास्तव में ऐसा इसलिए है क्योंकि आप एक रैखिक लेआउट में दृश्य को घुमाने की कोशिश करते हैं। और इससे इसकी समर्पित जगह विस्तार या घट जाएगी।

आइडिया 1: फ्रेम लेआउट का उपयोग करने का प्रयास करें और आपका दृश्य वहां के अंदर घूमता है आइडिया 2: कस्टम व्यू उपclass आज़माएं और अपने टर्नटेबल को ऑन ड्रा में खींचें। इंटरनेट में शुरू करने के लिए एक कंपास ड्राइंग उदाहरण के लिए देखो।

+0

धन्यवाद, मैं अब आपके सुझाव का प्रयास करूंगा। परिणाम के साथ जल्द ही वापस आ जाओ। – Ribs

+1

फ्रेम लेआउट का उपयोग करके समस्या का एक हिस्सा हल हो गया है जिसमें अब मैं अन्य विचार जोड़ सकता हूं जो घूर्णन छवि दृश्य से प्रभावित नहीं होंगे, लेकिन अगर मेरे पास स्क्रीन के किनारे पर घूर्णन छवि दृश्य है या यह स्क्रीन के रूप में चौड़ा है घूर्णन करते समय, छवि अभी भी अपने कोनों से चारों ओर धकेलती है। – Ribs

+0

फ्रेम लेआउट के संयोजन और ओवरराइड ऑनड्रा() कार्यों के साथ कस्टम व्यू क्लास का उपयोग करना। अभी भी कुछ अप्रत्याशित व्यवहार हैं लेकिन मुझे लगता है कि अब इस सवाल से संबंधित नहीं है। – Ribs

0

फिक्स अपने imageview द्वारा

imageview.setScaleType(ScaleType.CENTER);

0

सरल और स्पष्ट है, बस एक चक्र कैनवास आकर्षित और canvas.The कैनवास छवि में अपना चित्र जोड़ना कोनों नहीं होगा। साथ ही, एक छवि को दूसरे के ऊपर रखने के लिए फ्रेमलेआउट का उपयोग करें, इससे आपकी समस्या हल हो जाएगी

संबंधित मुद्दे