انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ست کردن تصویر دوربین بر روی گرید ویو (در برنامه نویسی اندروید)

ست کردن تصویر دوربین بر روی گرید ویو (در برنامه نویسی اندروید)

#1
سلام 

شرمنده ،  به یک مشکل خوردم ممنون میشم راهنمایی ام کنید
 یک  گرید ویو دارم که آیتم هاش ایمیج ویو هستند و وقتی رو هر یک از آیتمهای این این گرید ویو ( ایمیج ویو ) کلیک میشه دوربین باز میشه و یک عکس گرفته میشه در یک بیت مپ ذخیره میشه ولی روی امیج ویو مورد نظر ست نمیشه ؟؟ یعنی نمیدونم چطوری باید خروجی بیت مپ دوربین را روی ایمیج ویوی که ازش دوربین باز شده ست کنم ، ممنونم میشم کمکم کنید .
پاسخ

ست کردن تصویر دوربین بر روی گرید ویو (در برنامه نویسی اندروید)

#2
سلام
لینک زیر را نگاه کنید شاید مشکلتون برطرف شد.
لینک
 
فهمیدن بهتر از دانستن است.
پاسخ
 سپاس شده توسط admin

ست کردن تصویر دوربین بر روی گرید ویو (در برنامه نویسی اندروید)

#3
سلام.
بنده فرض می کنم که شما کد صحیح برای عکس گرفتن و سپس نمایش عکس گرفته شده در ImageView را دارید (حتما کل این روند را در یک پروژه ساده و تنها با یک ImageView تست کنید تا از درستی کدها خیالمان راحت شود). بنابراین ما روند کار برای یک ImageView را به صورت زیر داریم :

1- شناسایی ImageView 
2- رفتن کاربر به صفحه دوربین برای گرفتن عکسی (بعد از اشاره بر روی ImageView)
3- به محض گرفته شدن عکس، عکس در ImageView نمایش داده می شود (Bitmap را در ImageView نمایش می دهیم، یا اینکه فایل عکس در حافظه خارجی ذخیره شده و بعد آن را در ImageView نمایش می دهیم)

بنابراین کل کد ما، شامل سه مرحله فوق است. اکنون می خواهیم که این روند، قابل اجرا برای تک تک item های GridView (یا ListView --> مشابه می باشند) باشد. برای این منظور، ابتدا باید Adapter مربوط به GridView (یا ListView) را بیابیم. Adapter بخشی از کدها است که ساختار و عملکرد item ها را تعریف می کند (item ها را می سازد).
به عنوان یک مثال، کلید زیر، چگونگی ساخت یک ListView را شرح می دهد :

کلید شماره 843

در آن، Adapter به صورت زیر تعریف شده است :

کد پی‌اچ‌پی:
private class MyAdapter extends ArrayAdapter<String>{

        public 
MyAdapter(Context contextint resourceint textViewResourceId,
                        
String[] strings) {
                
super(contextresourcetextViewResourceIdstrings);
                
// TODO Auto-generated constructor stub
        
}
        
        @
Override
        
public View getView(int positionView convertViewViewGroup parent) {
                
LayoutInflater inflater = (LayoutInflatergetSystemService(Context.LAYOUT_INFLATER_SERVICE);
                
View row inflater.inflate(R.layout.list_itemparentfalse);
                
                
String stringName "string_key_" String.valueOf(position+1); 
                
int string_res_ID getResources().getIdentifier(stringName,"string",getPackageName());
                
String my_string getResources().getString(string_res_ID);
                
TextView tv = (TextViewrow.findViewById(R.id.textView1);
                
tv.setText(my_string);
                
                
String imageName "key_" String.valueOf(position+1); 
                
int image_res_ID getResources().getIdentifier(imageName,"drawable",getPackageName());
                
ImageView iv = (ImageViewrow.findViewById(R.id.imageView1);
                
iv.setImageResource(image_res_ID);

                return 
row;
        }
        
        


در آن، با کد زیر، View مربوط به ردیف را به دست می آوریم (تا با آن بتوانیم عنصرهای تعریف شده در لایه گرافیکی متناظر با هر ردیف را شناسایی کنیم) :

کد پی‌اچ‌پی:
View row inflater.inflate(R.layout.list_itemparentfalse); 

بعد مثلا یک TextView به صورت زیر شناسایی شده و متن دلخواهمان را در آن نمایش داده ایم (می توان برای هر item ، یک متن متفاوت را نمایش داد) :

کد پی‌اچ‌پی:
TextView tv = (TextViewrow.findViewById(R.id.textView1);
tv.setText(my_string); 

بنابراین، شما مشابه این Adapter ، یک Adapter برای  GridView (یا ListView) خود ساخته (یا اگر قبلا داشته، آن را ویرایش کنید) و درون آن، ابتدا ImageView را شناسایی نموده و بعد همان کدهای مربوط به روند مورد نظر را برای آن بنویسید (همان روند سه مرحله ای که بخش آخر آن، نمایش عکس گرفته شده در ImageView است). چون کدها درون Adapter است، پس با اشاره بر روی یک Item ، عنصر ImageView درون آن، عکس را دریافت کرده و نمایش می دهد (سایر item ها تغییر داده نمی شوند).

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

ست کردن تصویر دوربین بر روی گرید ویو (در برنامه نویسی اندروید)

#4
[font]ممنونم از لطف شما من سعی کردم ، اما متاسفانه نتونستم مشکلم رو بر طرف کنم ، کد ها ی برنامه رو میزارم ممنون میشم راهنمایی کنید ،چیکار باید بکنم 

کلاس adapternote  که گرید عناصر گرید ویو معرفی میشوند و ....
[/font]
[font][i]​[/i][/font]
کد پی‌اچ‌پی:
public class AdapterNote extends ArrayAdapter<StructNote> {
    



    public 
AdapterNote(ArrayList<StructNote> array) {
        
super(G.contextR.layout.adapter_note, array);

    }


    public static class 
ViewHolder {

        public 
ViewGroup layoutimg;

        public 
ViewGroup layoutdescription;

        public 
TextView  description;

       public 
ImageView imgcontact;
       
       public static 
Context               context;

        protected 
int    TAKE_PICTURE;

           public  
ImageView imgcon;
    

        public 
ViewHolder(View view) {


            
//layoutimg = (ViewGroup)view.findViewById(R.id.layoutimg);
            
            
imgcon = ( ImageView)view.findViewById(R.id.imgcon);
        }
        
            public 
void fill(final ArrayAdapter<StructNoteadapter, final StructNote item, final int position) {

                
imgcon.setOnClickListener(new OnClickListener() {

            
            @
Override
            
public void onClick(View view) {
                  
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    
G.currentActivity.startActivityForResult(intentTAKE_PICTURE);
                        
            }                            

        });        
        
        }      
             
    
    protected 
void onActivityResult(int requestCodeint resultCodeIntent data) {

            
                if (
requestCode == TAKE_PICTURE) {

                    {
                      
                    
//    Uri selectedImage = data.getData();
                    //    String[] filePathColumn = { MediaStore.Images.Media.DATA };
             //
               //         getContentResolver();
                    //    Cursor cursor = Media.query(null, selectedImage,
                              //  filePathColumn, null, null, null);
                       // cursor.moveToFirst();
             
                        //int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                       // String picturePath = cursor.getString(columnIndex);
                        //cursor.close();
                         
                        //ImageView imageView = (ImageView) findViewById(R.id.imgView);
                       // imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath))
                     // ImageView imgcon = (ImageView) findViewById(R.id.imgcon);
                 

                   //    Bitmap photo = (Bitmap) data.getExtras().get("data");
                       
                    //  imgcon.setImageBitmap(photo);
                     //  Log.i("LOG", "return from camera");

                    
}
                }

                
layoutdescription.setOnClickListener(new OnClickListener() {

                    @
Override
                    
public void onClick(View view) {

                        
Intent intent = new Intent(G.currentActivityActivtySmsBody.class);

                       
G.currentActivity.startActivity(intent);

                    }
                });

            }
        }
      

    @
Override
    
public View getView(int positionView convertViewViewGroup parent) {      
                        
        
ViewHolder holder;
        
StructNote item getItem(position);     
                       
        if (
convertView == null) {                      
            
            
convertView G.inflater.inflate(R.layout.adapter_noteparentfalse);
            
            
holder = new ViewHolder(convertView); 
            
convertView.setTag(holder);
        } else {
            
holder = (ViewHolderconvertView.getTag();
        }

        
holder.fill(thisitemposition);
        return 
convertView;
    }



    } 
کلاس G
کد پی‌اچ‌پی:
public class extends Application {

    public class 
context {

    }

    public static 
LayoutInflater        inflater;
    public static 
SharedPreferences     preferences;
    public static 
String                defaultBackground;
    public static 
String                animation;
    public static 
Activity              currentActivity;
    public static 
ArrayList<StructNotenotes   = new ArrayList<StructNote>();
    public static 
String                DIR_APP Environment.getExternalStorageDirectory().getAbsolutePath() + "/cameraCapture";
    public static 
Context               context;
    public static 
int                   Itemimge;
    


    @
Override
    
public void onCreate() {
        
super.onCreate();

        
context getApplicationContext();

        
inflater = (LayoutInflatergetSystemService(Context.LAYOUT_INFLATER_SERVICE);

        
preferences PreferenceManager.getDefaultSharedPreferences(context);
        
defaultBackground preferences.getString("default_background""theme00");
        
animation preferences.getString("default_animation""anim00");
        new 
File(DIR_APP).mkdirs();
    }


activitymain  که گرید ویو توش قرار داره و notifydatasetchange روش انجام می گیره 
کد پی‌اچ‌پی:
public class IconImage extends Activity {
    
  
    public 
ArrayAdapter adapter;


    @
Override
    
protected void onResume() {
        
G.currentActivity this;

        
super.onResume();
      if (
adapter != null) {
         
adapter.notifyDataSetChanged();
     }
  }


    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.icon_image);
        
        final 
GridView gridv = (GridViewfindViewById(R.id.gridv);
        
        
adapter = new AdapterNote(G.notes);
        
gridv.setAdapter(adapter);

        for (
int i 0102i++) {

            
StructNote note = new StructNote();
            
            
note.description "Textviw " i;
            
note.ImageView "image_res_ID" != null ;

            
G.notes.add(note);
        }

        
adapter.notifyDataSetChanged();

    }


    } 
کلاس structnote  که گریدویو ازش تغذیه میشه و عناصرشو در این کلاس تعریف کردم ​
کد پی‌اچ‌پی:
public class StructNote {

    public 
String  description;

    public 
Bitmap  imgcontact;

    public 
Bitmap imgcon;

    public 
int     position;
    public 
Bitmap  lstContent;

    public 
boolean ImageView;
    public 
int textView;
    public 
int  ResourceId;


البته به نظر خودم imgcon رو به صورت یک لایه تعریف کنم بهتره میشه و به عبارتی وقتی رو لایه کلیک شد باید دوربین باز بشه و تصویر خروجی روی ایمیج ویوی مورد نظر که کلیک شده ست بشه ، ؟؟؟؟

ممنون میشم راهنمایی کنید ، که چطوری خروجی دوربین رو که به صورت بیت مپ هستش روی همون آیتم گرید ویو که ایمج ویو قرار دادم ست بشه ،؟؟؟  

با سپاس فراوان از دوستان عزیز  
پاسخ
 سپاس شده توسط شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان